以前LINE botでFlex MessageのボタンにパラメータをつけたLIFFを取り扱う話を投稿しました。謎のエラーが出てしまって解決できずモヤモヤした気分で書いていて、あわよくば読んでくれた誰かが教えてくれればと思っていました。すると奇跡的にコメントを頂いたので改めて検証してみました。
頂いたコメントによると
どうやらLIFFにパラメータを渡したリンクを仕込んだボタンを使っても普通にLIFFは起動するようです。そして、Flex MessageのJSONもこちらのシミュレータで作成したもので、自分の作った時と全く同じやり方でした。なので、Flex Messageの作り方に問題があるわけではないようです。となると、原因はURLにあるのでしょう。
#URLを調べてみた
今度はボタンに仕込んだURLを検証しました。ひとまずコメントで頂いたURLを自分のLIFFに合わせて変更したら問題なく動きました。
原因がわかった
そしてここでエラー原因がわかりました。原因はパラメータに日本語を含んだURLを使っていたことです。Template Messageで気にせずやれていたことが、Flex Messageだとエラーになっていたのです。というわけでURIエンコードをかけて【liff_URL】/URLエンコードした日本語
の形でURLを生成したらLIFFは問題なくたち上がりました。
まとめると…
今回パラメータ付きのLIFFが立ち上がらなかった原因はFlexMessageの仕様の問題ではなく、LIFFのリンクに日本語が含まれていたことが原因でした。なのでFlex Messageで日本語のパラメータを含めたリンクを扱う際にはURIエンコードを使えばエラーなく使えます。(おそらくプロのエンジニアの人からしたらURIエンコードは当たり前のことでしょうが、、、)