WeWorkのコミュニティ・バー(受付)に来客があると、登録してあるメールアドレス宛にメールで通知があります。
すぐにメールに気づかないことも多く、大事なお客様をボーっとお待たせすることになりかねないので、Twilioを使って電話をかけるようにしてみました。
概要
WeWorkから届いたメールに対してGmailのフィルターで特定のラベル(例えばwework
)を付け、Google Aps Scriptでそのメールに反応して、Twilioを呼び出して特定の番号に電話をかけます。
前提
- メールはGmailを使ってる
- Twilioは有料版にアップグレードしないと余計なアナウンスが入ります
参考
Gmailに反応してTwilioに電話をかけるコードは、Google Apps ScriptとTwilioで、システムアラートを100%気付ける環境作りをほぼそのまま利用させていただいています。ありがとうございます。
WeWorkから届いたメールにラベルをつける
WeWorkのコミュニティ・バーに来客があると、メンバーとして登録してあるメールアドレス宛にWeWorkからメールが届きます。
なお、メールの差出人(From)はWeWorkのロケーションごとに違っていて、WE-JP-XXXX@wework.com
のような感じです(請求のメールなども@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
でトリガーを作成します。
これで大事な来客をお待たせすることがなくなるハズ。