株式会社グローバルゲート公式ブログ

【Google Apps Script(GAS)編】問い合わせフォームから届くメールを自動で処理しよう

こんにちは、株式会社グローバルゲート制作部のモーリーです。
今年は過去最大級に花粉が多いということらしく、花粉症持ちの私としても厳しい日々が続きそうです…。


さて、今回の記事ではGoogle Apps Script(GAS)を使用して問い合わせフォームからのメールを自動で処理する方法についてご紹介したいと思います。 
 
ホームページには欠かせない問い合わせフォームですが、件数が多い場合は返信作業が負担になったり、手作業によるミスなどが生じる可能性もあります。届いたメールの内容によって複雑な処理をしたいという場合もあるでしょう。 
 
Google Apps ScriptはGmailやGoogle SpreadSheetなどをプログラムで操作することができるため、定型作業の自動化や条件分岐などの処理を行うことができます。 


いくつかケースを想定してGoogle Apps Scriptのサンプルを書いてみました。 

Google Apps Scriptはその名前の通り、Googleのサービスを自動的に処理するプログラムです。 
そのため、問い合わせフォームからのメールをGmailで受信できるようにしておかないといけません。 
POPアカウントの設定を行っておいてください。

ケース1.問い合わせフォームから届いたメールをGoogle SpreadSheetに保存していきたい 

問い合わせフォームから届いたメールをメールソフト内だけで保存していると、他のメールと混じってしまったり確認作業にも手間取ってしまいます。特に採用やプレゼントの応募フォームとして問い合わせフォームを使用している場合は届くメールの件数も多くなり、メールソフトでの管理はおすすめできません。

そこでメールの内容をエクセルやデータベースで管理することも多いですが、メール本文から必要な情報をコピーしてペーストして…と手作業で行うのも効率がよくありません。

この「新着メールをチェックしてスプレッドシートに追記していく」という部分をGoogle Apps Scriptで自動的に行ってみます。

今回の例をそのまま使う場合、使用するSpreadSheetはGmailと同じGoogleアカウントで作成されたものを使用してください。

1.SpreadSheetを作成し、見出しなどを入力しておく

まずは問い合わせフォームの内容を保存するためのシートを作成し、見出しなどを入力しておきます。

2.Gmailの新着メールをチェックし、SpreadSheetに書き込むGASを書く

Google Apps Scriptのページを開き、「新しいプロジェクト」をクリックします。
 プログラムを書き込む画面になりますので、ここにプログラムを書いていきます。

Google Apps Scriptの記述例

以下のようなプログラムを書くことで

1.Gmailから指定の件名+未読のメールを取得
2.その本文を分析して項目ごとに取り出す
3.取り出した項目をSpreadSheetの末尾に書き込む

4.メールを既読にする

という処理が可能となります。
届くメールの内容によって(特に本文を分析する部分)プログラムが異なりますので、あくまで一例とお考えください。

function getNewEmails() { 
  //スプレッドシートを開く(このIDは架空のものです) 
  var sheet = SpreadsheetApp.openById('1EREREq_U8v3dRNYTwUTaj39843jmp;09QhEgn1ULVMd-farei31'); 
 
  //検索条件 
  //この場合は「ホームページからのお問い合わせ」という件名で未読のものということになる 
  var query = 'subject:"ホームページからのお問い合わせ" is:unread' 
  var threads = GmailApp.search(query); 
  var messageCount = threads.length; 
 
  //取得したメールを1件ずつ処理していく 
  var mark = '●' //メール内の問い合わせ項目の記号 
  for (var i = 0; i < messageCount; i++) { 
 
    //SpreadSheetに書き込む変数 
    var date, 
      companyName, 
      userName, 
      mail, 
      tel, 
      address, 
      genre, 
      text, 
      hoge 
 
    var thread = threads[i] 
    var message = thread.getMessages()[0] 
 
    //メール本文の取得 
    var body = message.getPlainBody(); 
 
    //取得した本文を分解して必要な部分に分ける 
    //この部分は届いたメールのフォーマットによって異なります 
    var bodyArray = body.split(mark) 
    for (var n = 0; n < bodyArray.length; n++) { 
      var item = bodyArray[n] 
 
      if (item) { 
 
        //1つ目の改行が見出しとなっているので改行で分解 
        var itemArray = item.split("\r\n") 
        itemArray = [itemArray.shift(), itemArray.join("\r\n")] 
        var itemTitle = itemArray[0].replace(mark, '') //見出し 
        var itemText = itemArray[1].trim()  //内容 
 
        //見出しから内容を判断して取得 
        switch (itemTitle) { 
          case '会社名': 
            companyName = itemText 
            break; 
          case 'ご担当者名': 
            userName = itemText 
            break; 
          case 'メールアドレス': 
            mail = itemText 
            break; 
          case 'TEL': 
            tel = itemText 
            break; 
          case '所在地': 
            address = itemText.replace(/[\r\n]/g, '') //住所は一行のほうが使いやすいので一行にする 
            break; 
          case 'お問い合わせ内容': 
            genre = itemText 
            break; 
          case '詳しくご記入ください': 
            text = itemText 
            break; 
        } 
      } 
    } 
 
    //受信日時の取得 
    date = message.getDate(); 
    date = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd hh:mm:ss'); 
 
    //列が「日時 社名 担当者 メールアドレス TEL 所在地 問い合わせ内容 詳細」となっているのでその順番で書き込み 
    sheet.appendRow([ 
      date, 
      companyName, 
      userName, 
      mail, 
      tel, 
      address, 
      genre, 
      text, 
      hoge 
    ]); 
 
    //メールを既読にする 
    thread.markRead(); 
 
  } 
}

スプレッドシートのID取得方法

スプレッドシートのIDはURLから確認できます。

3.実行して権限を設定する

プログラムの入力が終わったら実際に実行してみましょう。
画面上部の「実行」をクリックします。

このプログラムはGmailとSpreadSheetへのアクセスと編集を行うため、権限の設定が必要です。
以下の画面が出てきたら「許可」をクリックします。

実行ログでエラー表示などがなければ正常動作したということになります。

4.このGASを一定時間ごとに自動で実行する

あとはこのプログラムを一定時間ごとに実行させれば、問い合わせフォームの内容を自動的にSpreadSheetに書き込んでくれます。

Google Apps Scriptでは「トリガー」という機能で自動実行させることができます。

先程プログラムを入力した画面の左側メニューから「トリガー」を選択し、「トリガーを追加」をクリックします。

次の画面でどのタイミングでプログラムを実行するかの設定を行います。

たとえば、1時間に1回実行するのであれば

イベントのソースを選択:「時間主導型」
 時間ベースのトリガーのタイプを選択:「時間ベースのタイマー」
時間の間隔を選択:「1時間おき」

として保存します。

5.結果を確認する

実際にメールを送ってから実行してみましょう。
以下のような問い合わせメールが届いたとして、SpreadSheetを見てみると…

成功しました!
SpreadSheetは表計算ソフトなので、入力内容によってソートやフィルタリングも自由に行なえます。
問い合わせメールの管理が飛躍的に便利になると思います。

弊社では使いやすさと自由度にこだわったCMS「WebChanger」を開発し、提供しております。
ホームページの運営にお悩みの方はお気軽にご相談ください。

ケース2.届いたメールの内容によって異なる文面の返信を送りたい 

ほとんどの問い合わせフォームには自動返信機能がありますが、返信内容を毎回同じではなく問い合わせの内容によって変えたいと思うこともあるでしょう。

たとえば以下は当社の問い合わせフォームですが、「問い合わせ内容」によって違う返信ができれば、より親切ではないかと思うことがあります。

Google Apps Scriptを使えばメールを送ることができますので、

1.新着メールを確認して取得する
2.その本文を分析し、指定の条件(特定の文字が含まれている、など)によって返信用の文章を生成する
3.メールを送信する

ということができれば、届くメールによって異なる文面を返信するということが可能となります。

Google Apps Scriptの記述例

新着メールを検索する部分は前回の「SpreadSheetに書き込む」と同じです。
GmailApp.sendEmailという関数でメールを送信します。

function autoReplay() { 
  //検索条件 
  //この場合は「ホームページからのお問い合わせ」という件名で未読のものということになる 
  var query = 'subject:"ホームページからのお問い合わせ" is:unread' 
  var threads = GmailApp.search(query); 
  var messageCount = threads.length; 
 
  //取得したメールを1件ずつ処理していく 
  var mark = '●' //メール内の問い合わせ項目の記号 
  for (var i = 0; i < messageCount; i++) { 
 
    //SpreadSheetに書き込む変数 
    var 
      mail, 
      genre, 
      replayBody 
 
    var thread = threads[i] 
    var message = thread.getMessages()[0] 
 
    //メール本文の取得 
    var body = message.getPlainBody(); 
 
    //取得した本文を分解して必要な部分に分ける 
    //この部分は届いたメールのフォーマットによって異なります 
    var bodyArray = body.split(mark) 
    for (var n = 0; n < bodyArray.length; n++) { 
      var item = bodyArray[n] 
 
      if (item) { 
 
        //1つ目の改行が見出しとなっているので改行で分解 
        var itemArray = item.split("\r\n") 
        itemArray = [itemArray.shift(), itemArray.join("\r\n")] 
        var itemTitle = itemArray[0].replace(mark, '') //見出し 
        var itemText = itemArray[1].trim() //内容 
 
        //見出しから内容を判断して取得 
        switch (itemTitle) { 
          case 'メールアドレス': 
            mail = itemText 
            break; 
          case 'お問い合わせ内容': 
            genre = itemText 
            break; 
        } 
      } 
    } 
 
    //genreによってメール本文を定義する 
    switch (genre) { 
      case 'WebChanger・Webサイト制作について': 
        replayBody = "WebChangerについては以下の動画をご覧ください。\n\nhttps://www.youtube.com/watch?v=WqQwx_7kaZ8"; 
        break; 
      case 'GSV・ITコンサルティグサービスについて': 
        replayBody = "GSVについては以下のページをご覧ください。\n\nhttps://www.globalgate.co.jp/gsv-system" 
        break; 
      case 'PCNS(PCネットワークサービス)について': 
        replayBody = "PCNSについては以下のサイトをご覧ください。\n\nhttps://pcns.jp/" 
        break; 
      case '販売パートナーについて': 
        replayBody = "販売パートナー担当よりご連絡させていただきます。" 
        break; 
      case 'その他のお問い合わせ': 
        replayBody = "担当者よりご連絡させていただきます。" 
        break; 
    } 
 
    //メールを送る 
    GmailApp.sendEmail(mail, 'お問い合わせありがとうございました', replayBody, { 
      name: '株式会社グローバルゲート' 
    }) 
 
 
    //メールを既読にする 
    thread.markRead(); 
 
  } 
}

このプログラムを実行すると、以下のように「お問い合わせ内容」によって異なる返信を自動で行うことができます。

この方法を使う場合は問い合わせフォーム本体の自動返信機能は無効にしておきましょう。

注意!
Google Apps Scriptによるメール送信は1日100件までしかできません。
100件以上のメールを送りたい場合は違う方法を検討する必要があります。

ケース3.届いたメールをChatworkに投稿する

Chatwork(チャットワーク)は国産のチャットツールで、LINEのように簡単に使えながらもビジネスで使える機能が豊富に用意されていることが特徴です。導入企業も多いため、既に利用されている企業様も多いのではないかと思います。

Google Apps Scriptを使ってChatworkのメッセージの取得や送信、ルームの取得などを簡単に行うことができるライブラリが公開されています。

今回は届いたメールをChatworkの指定ルームに投稿するプログラムを書いてみました。

1.Chatwork用のライブラリをGASに追加する

これまでのスクリプトとは違い、まずはじめにChatwork用ライブラリを追加する必要があります。

サイドバーの「ライブラリ」をクリックします。

開いた画面の「スクリプトID」に以下の文字列を入力し、「検索」をクリックします。

1nf253qsOnZ-RcdcFu1Y2v4pGwTuuDxN5EbuvKEZprBWg764tjwA5fLav

そうするとChatworkClientライブラリが見つかりますので、「追加」をクリックします。

サイドバーに「ChatWorkClient」が表示されれば成功です。

2.ChatworkのAPIトークンを取得する

Chatworkにメッセージを投稿したり情報を取得したりする場合、APIトークンが必要になります。
Chatworkにログインし、APIトークンを取得します。

右上のメニューから「サービス連携」を選び、「APIトークン」を選択して表示される文字列がAPIトークンです。

このAPIトークンが分かればメッセージの送信や取得ができてしまいますので、パスワードと同じく他人に知られないように注意してください。

3.GASを書く

これまでと同じようにGoogle Apps Scriptを書きます。

function sendChatwork() { 
  //検索条件 
  //この場合は「ホームページからのお問い合わせ」という件名で未読のものということになる 
  var query = 'subject:"ホームページからのお問い合わせ" is:unread' 
  var threads = GmailApp.search(query); 
  var messageCount = threads.length; 
 
  //取得したメールを1件ずつ処理していく 
  for (var i = 0; i < messageCount; i++) { 
 
    var thread = threads[i] 
    var message = thread.getMessages()[0] 
 
    //メール本文の取得 
    var body = "問い合わせメールが届きました。確認してください。\n\n" + message.getPlainBody(); 
 
  var cw = ChatWorkClient.factory({token: 'ChatworkのAPIトークン'}); 
    cw.sendMessage({ 
      room_id: メッセージを送りたいルームID, 
      body: body 
    }); 
 
  } 
}

ルームIDとは

ルームIDはChatwork上のグループチャットに割り振られているIDで、そのグループを開いたときのURLから確認できます。

4.実行する

あとはトリガーでこのプログラムを一定時間ごとに実行させれば、新着メールがあった場合指定したグループにメッセージが投稿されます。

外部サービスに情報を送信する処理となるため、初回実行時は権限を許可する必要があります。

まとめ

というわけで、今回はGoogle Apps Scriptを使用した問い合わせメールの自動処理についてご紹介しました。 
このような自動化は業務の効率化につながることはもちろんですが、プログラムで処理することで人為的なミスの防止にもつながります。 
 
また、メールの自動処理についてはGoogle Apps Scriptだけでなく、Zapier(ザピアー)IFFFT(イフト)といったサービスもよく使われています。これらはGoogle以外の多様なサービスとの連携が可能ですので、より幅広い活用方法が考えられます。次回以降のブログでご紹介したいと思います。

【関連記事】

ご相談・お問い合わせ

当社サービスについてのお問い合わせは下記までご連絡下さい。

お電話でのお問い合わせ

06-6121-7581 / 03-6415-8161