
今回はiPhoneのショートカットアプリからGoogleAppsScriptを経由してLINEに通知する方法を紹介したいと思います。通知する内容は「今から帰るよ!」っていうものでワンタップで通知するようにしていきたい。iPhoneのショートカットアプリとGASを連携して便利にしてしまいましょう。
ちなみにGASとか面倒だわ・・・って場合はIFTTTを使う方法もあるからそっちでもいいかもしれない。
「今から帰る」ショートカットを作る
iPhoneのショートカットを使って今から帰る!っていうLINEを送ることはできるけど、ホーム画面に追加したショートカット アイコンをタップ→LINEでペースト→送信ボタンタップのような流れを辿らないといけません。
これでも楽っちゃ楽だけど、3回ぐらいタップしないと送信できないからちょっと面倒。できれば、1回アプリをタップするだけで送信してほしいですよね。だから1回ショートカットのアプリをタップしただけでLINEに送信できるようにしていきたいと思う。普通にショートカット からだとできないからGoogleAppsScriptを使ってやっていくよ。
ワンタップ「今から帰る」LINE通知の作り方の流れ
大まかな流れはこんな感じでいけるはずです。
- ショートカットでLINEに通知する文言の作成
- 作った文言をGoogleAppsScriptで受け取る
- 受け取った文言をLINEに通知する
文言は別にGoogleAppsScriptで作ってもいいけど、ショートカット からマップなんかを使って移動距離や到着時間なんかを簡単に設定する事ができるから、ショートカットで作ってしまいたい。あとはそれをGoogleAppsScriptに処理してもらうだけです。
1つ注意なんだけど、今回やる方法はLINEに通知する際にはLINE Notifyという通知用のアカウントを使って、グループに通知をいかせるようにするから誰か特定の個人に向けてはできないです。LINEのAPIでどこまでできるか分からないけど、やってみたい方はLINE Messaging APIあたりを漁ってみるといいかもしれないですね。
LINE Notifyの設定をする
LINE Notifyにアクセスしてまずは、通知するグループの設定をします。LINEでグループを作成していない場合は作成してから設定しましょう。
トークンを発行する
右上から[マイページ]→下のほうに進んで[トークンを発行する]をクリックです。
トークン名はなんでも好きなものを設定してください。通知するグループは通知を送りたいグループを選択しましょう。

後でGoogleAppsScriptで記述するときに使うから無くさないように。
グループにLINE Notifyアカウントを招待する
LINE Notifyアカウントからの通知がグループに来るようにグループにLINE Notifyを招待しておきましょう。
GoogleAppsScriptでLINE通知の記述する
LINENotifyの設定が終わったら、GoogleAppsScriptを使って設定したLINEのグループに通知する記述をしましょう。まずは適当にGoogleAppsScriptの記述が動くかを確かめます。適当に受け取った文字を返す関数を作ります。
function doPost(e) {
return ContentService.createTextOutput(e.postData.contents);
}
doPostはGASではPOSTでリクエストを受けたときに実行される関数だから、POSTで何か送ればこの関数が発火します。そしたら、[公開]から[webアプリケーションとして導入]と進んでデプロイします。
とりあえず、誰でもアクセスできるように[Anyone, even anonymous]としておきます。試しにターミナルからcurlを叩いてみるとこんな感じですね。
Current web app URLは画面に表示されたURL
$ curl -L -d "Hello" "Current web app URL"
> Hello
動くことは分かったからコードを書いていきます。
function doPost(e) {
const params = JSON.parse(e.postData.getDataAsString());
const message = params.message;
const token = "取得したLINENotifyのトークン";
const options =
{
"method" : "post",
"headers" : {"Authorization" : "Bearer "+ token},
"payload" : "message=" + message
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
return ContentService.createTextOutput(message);
}
これでcurlでリクエストを送ってみると、LINEのグループに通知がいくはず。
curl -L -d '{"message": "Hello"}' "自分のweb app URL"
届きますね。
叩いて動くことは分かったから次はLINEのショートカットから叩きます。
LINEのショートカットからGASを叩いてLINEに通知する
GASをショートカット から叩くためにそれっぽいショートカットを作ります。目的地までの距離を取得して、大体どれぐらいで着くかっていう「今から帰るよ」通知を送ることにする。ショートカットはこんな感じにしておきましょう。
- テキスト・・・LINEに通知したい文言
- URL・・GASで公開したときに表示されたweb app URL
- 内容・・・方法をPOST、本文にはjsonでmessageキーにテキストに入力した内容をセット
これでショートカットを実行するとこんな感じでLINEに通知が届く。
文言はショートカット のテキストをいろいろ変えれば、なんとでもなりそうですね。
誰でも実行できないようにする
さっきまでは[Who has access to the app]の部分を誰でもアクセスできるように[anyone, even anonymous]としていたけど、変更しておきます。
こうすると認証しないと今までのようにcurl叩いて実行したり、ショートカット からは実行できなくなる。認証が必要になるけど、アクセストークンを使えばアクセスできる事ができるからそれを取得したい。アクセストークンは`ScriptApp.getOAuthToken()`を使えば取得できるみたいだから、ちょっと試してみる。
[Google Apps Script]認証が必要なウェブアプリケーションを外部から実行する
function doPost(e) {
Logger.log(DriveApp.getRootFolder().getName());
Logger.log(ScriptApp.getOAuthToken());
}
長い文字列が出てくるからこれをコピーしてやります。ショートカットアプリから認証できるように今コピーしたものをヘッダに貼り付けます。
左側に[Authorization]と入力して右側には「Bearer コピーしたアクセストークン」としましょう。これで実行してみると同じようにLINEに通知がきますね。
もしcurlで確かめたいなら、以下のような感じでターミナルから叩いてみるといいでしょう。
curl -L -H 'Authorization: Bearer 取得したアクセストークン' -d '{"message": "Hello"}' "web app URL"
まとめ
作ったものをホーム画面に追加しておけば、ワンタップで「今からから帰るよ!」っていうLINEをグループに通知できるようになりました。まあ、楽っちゃ楽だけどなんかもうここまでやらなくても普通にLINEで送れよ・・・って思っちゃいますよね。
ちなみにGAS面倒ならIFTTT使った方が楽だと思います。
GoogleAppsScriptは環境構築もいらないしデプロイも楽だし超絶便利だからいろんなものに使えそうな感じです。コードはJavaScriptみたいなものだから、使ってみたい人はいろいろ試してみるといいですよ。