WeWorkへの来客時に電話で呼び出す


WeWorkのコミュニティ・バー(受付)に来客があると、登録してあるメールアドレス宛にメールで通知があります。
すぐにメールに気づかないことも多く、大事なお客様をボーっとお待たせすることになりかねないので、Twilioを使って電話をかけるようにしてみました。

概要

WeWorkから届いたメールに対してGmailのフィルターで特定のラベル(例えばwework)を付け、Google Aps Scriptでそのメールに反応して、Twilioを呼び出して特定の番号に電話をかけます。

前提

  • メールはGmailを使ってる
  • Twilioは有料版にアップグレードしないと余計なアナウンスが入ります

参考

Gmailに反応してTwilioに電話をかけるコードは、Google Apps ScriptとTwilioで、システムアラートを100%気付ける環境作りをほぼそのまま利用させていただいています。ありがとうございます。

WeWorkから届いたメールにラベルをつける

WeWorkのコミュニティ・バーに来客があると、メンバーとして登録してあるメールアドレス宛にWeWorkからメールが届きます。
なお、メールの差出人(From)はWeWorkのロケーションごとに違っていて、[email protected]のような感じです(請求のメールなども@wework.comから送られてきますが、WE-JP-XXXXではありません)。
Gmailのフィルターで差出人などを条件に特定のラベルを付けます。フィルターの使い方はGmailヘルプなどを参考にしてください。
ラベルを付けなくてもできますが、実装が楽なのと後から来客を一覧で見れたりするので私はラベルを付けることにしました。

Twilioに登録する

Twilioのアカウン/電話番号を持っていなければサインアップしてください。サインアップすると050の電話番号とアカウントSID、AUTHTOKENが発行されます。
前提にも書きましたが、無料のトライアルアカウントのままでも使えますが、電話をかけた時にアップグレードしてねってアナウンスが入ります。

Gmailに反応してTwilioを呼び出すGoogle Apps Script

Google Driveから新規にGoogle Apps Scriptを作って、以下のコードをコピーし、TwilioのアカウントSID、AUTHTOKEN、および発行された電話番号とかけたい先の電話番号を反映してください。

weworkラベルの付いた未読のメールがInboxにあると30秒間電話を鳴らします。既読になっていると何もしません。
なお、このコードではSubjectを一回だけそのまま読み上げています(44行目あたり)。お好みに合わせて変更してください(日本語も使えます)。

保存したら、メニューRunからcheckMailAndMakePhoneCallを選択して実行してみましょう。Googleアカウントの選択とGmailにアクセスすることの確認があります。承認すると電話がかかってきます(未読のメールがある場合)。

ACCOUNT_SID = "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
AUTHTOKEN = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
FROM = "+8150xxxxxxxx";
TO = "+81xxxxxxxxxx";
LABEL = "wework";


function checkMailAndMakePhoneCall() {
  var weworkCallThreads = getLabeledUnreadThreads(LABEL);

  if (weworkCallThreads.length > 0) {
    var subject = weworkCallThreads[0].getMessages()[0].getSubject();
    Logger.log('Make a 30-second phone call: ' + subject);
    makePhoneCall(30, subject);
    return;
  }

}


function getLabeledUnreadThreads(labelName) {
  var labeledUnreadThreads = [];
  var threads = GmailApp.getInboxThreads();
  for (var i in threads) {
    var thread = threads[i];
    if (!thread.isUnread()) {
      continue;
    }
    var labels = thread.getLabels();
    for (var j in labels) {
      var label = labels[j];
      if (label.getName() == labelName) {
        labeledUnreadThreads.push(thread);
      }
    }
  }
  return labeledUnreadThreads;
}


function makePhoneCall(timeout, subject) {
  var message = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
      "<Response><Say language=\"ja-jp\">" +
      subject +"</Say></Response>";

  var options = {
    'method': 'post',
    'headers': {
      'Authorization': 'Basic ' + Utilities.base64Encode(ACCOUNT_SID + ':' + AUTHTOKEN)
    },
    'payload' : {
      'Url': 'http://twimlets.com/echo?Twiml=' + encodeURI(message),
      'From': FROM,
      'To': TO,
      'Timeout': timeout.toString()
    }
  };
  UrlFetchApp.fetch('https://api.twilio.com/2010-04-01/Accounts/' + ACCOUNT_SID + '/Calls', options);
}

1分毎にチェックする

Google Apps Scriptは定期的にコードを実行することができるので、例えば1分毎に実行させて電話に気づかなくてもしつこくかけ直すようにしておきましょう。
Google Apps ScriptのメニューEditからCurrent project's triggersを選択、Developer Hubの右下にあるAdd Triggerでトリガーを作成します。

これで大事な来客をお待たせすることがなくなるハズ。