2015/05/23

Google Apps Scriptによるメール自動返信botの作成(2)

同(1)では受信トレイから未読メールを取得し、それが受送信用アドレスからのメールアドレスであることを確認するとcondirmBody関数を実行するようにした。この記事はそのconfirmBody関数を作成するところから続ける。
関数名は「Body(本文)を確認する」という意味にしたく、「確認する 英語」と検索をかけて出てきたのが「confirm」だったのでそうしたのだが、よく考えたらconfirmは確認するという意味でも、どちらかというと「認める」のような意味が強いのでそぐわないようにも思うが、今さら関数名が記述される部分をすべて書き直すのも面倒なのでとりあえずメール返信botのプログラムの中ではconfirmで統一する。今後同じようなシチュエーションがあれば「check○○」にでもしようかと思う。英語って難しい。

confirmBody関数では、引数のメッセージの本文を取得しその内容を確認する。そしてその内容に応じて返信内容を決め、それに応じた関数を起動するようにする。
今回の記事では、メッセージ本文の文字列に「おはよ」が含まれていれば、それにふさわしい返信をする関数(GoodMorning関数)を起動するようにする。

function confirmBody(m){
  var body = m.getBody();
  if(body.indexOf('おはよ',0)!=-1){
    GoodMorning();
  }
}
使用した機能:getBody() - Class GmailMessage - Apps Script - Google Developers
 引数のメッセージmについて、getBodyでその本文を取得できる。ここでは変数bodyに代入している。
 そして、前回も使用したindexOf関数で「おはよ」が含まれればif文内の処理を実行し、GoodMorning関数を起動するようにしている。

function GoodMorning(){
  var to = '受送信に使うアドレス';
  var title = 'Re:';
  var body = '任意の本文';
  var opt = new Object();
  opt.name = 'botからのメールで表示される送信者名'
  opt.replyTo = 'bot用のメールアドレス';
  GmailApp.sendEmail(to,title,body,opt);
}
使用した関数:sendEmail(recipient, subject, body, options) – Class MailApp - Apps Script - Google Developers
続いてGoodMorning関数である。使用した関数はsendEmail関数で、この関数の第1引数はメールの送信先、第2引数はメールのタイトル、第3引数は本文、第4引数はオプションだ。第1~第3引数では文字通りだが、第4引数はname(送信されるメールで表記される送信者名)、replyTo(返信する際の送信先)を保持するオブジェクトだ。これらを引数としてsendEmail関数を実行すると、引数で指定した通りのメールが送信される。

そして最後に、前回記事で作成した未読メール確認関数を自動的に、一定間隔で実行するようにする。
上部のメニューからリソース→現在のプロジェクトトリガーを選択し、新しいトリガーを追加のリンクをクリック。左からconfirmUnRead、時間主導型と選択肢、残り2つのセレクトボックスで実行する間隔を選択すれば良い。
これで設定した間隔ごとに未読メールがあるか確認するようになる。

たったこれだけのコードで、しょぼいなりにメールを自動返信できるようになった。もっとも、今後返信パターンを増やした際、複数のパターンにヒットする本文がある場合どうするか、などの課題はある。
また、GoogleAppsScriptはメールだけでなく、Googleの様々なサービスにアクセスできる。ただ昔をなぞるようにメールの自動返信botを作り始めたが、もう少し実用性のあるものも作れそうだ。例えばカレンダーに接続して、予定がある日の朝にメールを送信するようにする、といったこともおそらく可能だ。今後、このbotを発展させる形で色々と機能を追加して遊んでみたい。

0 件のコメント:

コメントを投稿