【GAS】LINE Front-end FrameworkをGASで作ったWebアプリと連携させたらうまくいかなかった話【LIFF】
GASで作ったサーバーレスWebアプリをLIFFから呼び出してみました。結論からいうとうまく動きませんでした。
LIFFとは
LIFF(LINE Front-end Framework)はLINEアプリのトークルーム内で動作するウェブアプリの実装を可能にするプラットフォームです。LIFFって何がいいの?というところは
みたいなところがあって、自分で作ったアプリとLINEの連携がとっても簡単にできるという嬉しいサービスのようです。
アプリへLIFFの実装
早速試してみたいと思います。まずは、LIFFで呼び出すWebアプリケーションを作ります。
WebアプリはGAS(Google Apps Script)で作ります。
今回作るアプリはシンプルにLIFFに表示されたアプリからテキストを入力して、LINEのトークルームにユーザーidとアプリから入力された内容を投稿する、というものにします。
アプリ作成に必要なものはGoogleアカウントとブラウザのみです。
GASで下記ファイルをそれぞれ編集します。
コードはLINEのチュートリアルを参考にしました。
(確かDevelopersサイトを開くにはアカウントを作る必要があったかも?)
GASプロジェクトの作り方は【GAS】Google Apps Scriptとは - だって楽したいじゃんか!を参照してください。
コード.gs
function doGet(e) { var template = HtmlService.createTemplateFromFile('index'); return template.evaluate().setTitle('GAS+LIFF').addMetaTag("viewport", "width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=10.0") }
エンドポイントにGetでアクセスされたらindex.htmlを生成し、レスポンスとして返します。
index.html
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <div> <input id="msg" type="text" placeholder="送信メッセージを入力してください。"/> <button onclick="alertMessage();">送信</button> </div> <?!= HtmlService.createHtmlOutputFromFile('js').getContent(); ?> </body> </html>
html内にはテキストボックスとボタンを配置します。ボタンが押されたらjs.htmlのalertMessage関数を呼び出します。
js.html
<script src="https://d.line-scdn.net/liff/1.0/sdk.js"></script> <script> var userId=""; window.onload = function (e) { alert("onload"); liff.init( data => { // Now you can call LIFF API alert(data); userId = data.context.userId; alert(data); }, err => { // LIFF initialization failed alert(err); } ); }; function alertMessage(){ var msg = document.getElementById("msg").value; alert(userId + " : " + msg); liff.sendMessages([ { type:'text', text:userId + " : " + msg } ]); } </script>
1行目でLIFFのsdkを呼び出します。
window.onloadで、アプリが表示された時の挙動を設定します。liff.init関数を呼び出してuserIdを取得しています。
失敗したらalertメッセージが表示されるようにしています。
alertMessageはアプリで送信ボタンを押した時の動作を記述します。
アラートメッセージで取得したuserIdとテキストボックスに入力された値を表示し、liff.sendMessagesで、メッセージをLINEのチャットルームへ送信します。
アプリを公開して、URLを控えます。
※アプリの公開方法は【GAS】無料!!30分で作れるLINEチャットボット - だって楽したいじゃんか!を参照してください。
アプリをチャットボットに登録
チャットボットにLIFFを登録します。Webから追加します。
LINEのディベロッパーサイトからBotチャンネルを開きます。
Botの追加については【GAS】無料!!30分で作れるLINEチャットボット - だって楽したいじゃんか!を参照してください。
Botの画面のLIFFタブを選択し、追加を押下します。
名前とサイズ、エンドポイントURL、オプションを選択します。
サイズはLINE内でアプリを開く時のサイズです。
エンドポイントURLは登録したいWebアプリのURLを指定します。
オプションのBLEは今回LINE Thingsを使わないので、OFFに設定します。
保存を押下します。
保存押下後、LIFFにアプリ登録が完了したらLIFF URLが発行されるので、こちらも控えておきます。
このLIFF URLをLIFFを紐づけたチャットボットが参加しているトークルームに投稿すると、Webアプリが表示されるのですが、アプリを呼び出すたびにLIFF URLを打ち込むのイケていないので、リッチメニューから呼び出せるように設定します。
リッチメニューとの紐づけ
リッチメニューはURLやテキストなどの特定の文言をボタンとして登録できる機能です。登録内容がURLであればウェブを開き、テキストならばトークルームにテキストを入力するなどの動きをします。
リッチメニューの登録はLINE@MANAGERから行います。
アカウント一覧からリッチメニューを登録したいBotを選びます。
メニューリストからリッチコンテンツ作成を選択します。
新規作成を押下します。
タイプは適当に設定してください。
コンテンツの左側のブロックがメニューボタンのレイアウトになっていて、それぞれのボタンを押したときの挙動を右側で設定します。
アイコンや、ラベルはお好きに設定してもらって、大事なのは、リンクです。
LINE内でアプリを立ち上げられるようにするには、URLを選択し、先ほどのLIFF URLを記載します。
これで保存すると、リッチメニューボタンを押したときにアプリが表示されます。
以上で動くようになったはずです。
それでは早速動かしてみましょう。
動作検証
ボットを開き、リッチメニューを表示させます。先ほど作ったLIFFTestメニューを押下します。アプリがLINEブラウザ内で立ち上がり、sdkのinit関数が呼び出されます。
。。。ん?あれ?
認証できないと表示されました。
LINEにメッセージを送ってみます。
テキストボックスに文字を入力して送信ボタンを押下します。
やはり動かないようです。
認証に失敗しているのでuserIdが取得できていない上に、もちろんLINEメッセージも送信できていません。
まとめ
今回はGASのサーバーレスアプリとLINEの連携ということでLIFFを使ってみました。結論として、アプリ自体をLINEの内部ブラウザで表示させることには成功したものの、認証周りでLINEとの連携まではできませんでした。
なぜ認証に失敗するのか、設定が間違えているのか、GAS特有の制約にはまっているのか、Webアプリ側でLINEログインを実装しないと動かないのか。。。ちょっとよくわからないので継続して調べてみます。
- 【GAS】Google Apps Scriptとは - だって楽したいじゃんか!
- 【GAS】無料!!30分で作れるLINEチャットボット - だって楽したいじゃんか!
- 【GAS】人工知能APIを使って自然な返答をするLINEチャットボットを作ってみる【LINE】 - だって楽したいじゃんか!
- 【GAS】LINE Front-end FrameworkをGASで作ったWebアプリと連携させたらうまくいかなかった話【LIFF】 - だって楽したいじゃんか!
- 【GAS 】簡易サーバーレスWebアプリを作る①Hello World - だって楽したいじゃんか!
- 【GAS】定期的に特定条件のメールを抽出し転送する方法 - だって楽したいじゃんか!