LINE botといえばLIFFというLINE botと連携するWebアプリを作りたいときにとても便利なフレームワークです。このLIFFはLINE Developersで設定した独自のURLからアクセスして使うものですが、URLをそのまま使う方法もありますが、例えばbotのやり取りで取得した値をLIFFのリンクの中にパラメータとして付与して動作したいときがあります(つまり、LIFF_URL?value=hoge
という形)。botのやり取りの中で動的に生成するときには、リンクのテキストをそのまま返信するよりもLINE botを使ってるならFlexMessageを使ってボタンを押したらリンクにアクセスして、LIFFを立ち上げるなんてことをやってみたいわけですよ。ところが実際にやってみるとハマってしまったので、その覚書です。
FlexMessageを使ってみた
FlexMessageでボタンの実装はやったことありませんでしたが、こちらのシミュレータを使って簡単に作成出来ました。実際に動かしたところがこちらです。
結構ハマったけど、flex messageとLIFFの連携ができて良かった! pic.twitter.com/T4gxAuRtNM
— K.Miura (@k_miura_io) October 19, 2019
こちらは冒頭で話していたパラメータを付与していないパターンの動作ですが、問題なく動いています。そして、今度は同じFlexMessageでボタンで立ち上げるURLにパラメータを付与すると以下の画面が表示されます。
あれ?LINEアプリの方はすでに最新バージョンになっているのに、これはどういうことでしょう?パラメータを付与するURLはFlex Messageに対応していないのでしょうか?知っている方いらっしゃったら教えて下さい。
色々調べてみたら
やはりFlex Messageにパラメータを付与したURLを使っている事例は見つからず、仕方ないので他の方法を探してみました。すると、Template Messageが見つかりました。Flex Messageとよく似ていますが、こっちは予め決められたテンプレートに対してカスタムを行うメッセージです。こちらにもボタンの中に埋め込んだURLを実行するアクションを入れてみました。先程失敗したパラメータを付与したLIFF URLをこのテンプレートメッセージを入れて再度試してみたら、問題なくLIFFが立ち上がりました。
この動作の違いは一体…
Flex MessageとTemplate Messageではアクションの違いがあることが分かりました。これは中で動作しているプログラムに違いでもあるのでしょうか?とりあえず、現時点での結論としては 「LIFF URLをそのまま立ち上げるだけならどちらでもいいが、パラメータを付与したLIFF URLを立ち上げるときにはTemplate Messageのほうが良い」となりました。
※この内容については、補足記事を書いたのでそちらをご覧ください。