LINEのプレビューにハマりました。。。

現在、弊社で開発、リリースしているライフバンクサービス「人生金庫」で安否確認をLINEを利用したり、決済機能をStripeに変更するなど、全面改訂をしています。
そこで、安否確認メッセージをLINE MessageAPIでpushMessageしています。

今回ここでハマりました。。。。

■現象
「人生金庫」では安否確認のためのリンクをメッセージに貼り付けておいて、それをクリックしてもらうことで生存確認としています。
以前から、このメッセージをLINEに飛ばしてほしいとのご要望を頂いていたのですが、もう動かしだして5年以上立つため、作りが古く、LINEとの連動をどうしたものかと考えていました。
とはいえ、なんで今回一から作り直すこととして、LINEへのメッセージも取り込むことにした次第です。

今回ハマったのが、MessageAPIで安否確認メッセージをLINEに飛ばせるんですが、LINEの画面を開いたら、安否確認メッセージがクリックされた状態となってしまう現状でした。
利用者さんがリンクをクリックされることを前提として生存確認としているのに、かってにクリックされた状態となると、生存確認になりません。

■わかったこと
この現状ですが、LINEの表示が「プレビューモード」が標準となっていることが原因でした。
URLのリンクが付いたメッセージを表示すると、URLに応じが画面が小さく表示されていますよね?
「人生金庫」では、画面を表示するのでなく、生存確認機能が動いてしまっていました。

■対策
LINEの画面でURLをクリックすると、ユーザーエージェントとして”facebookexternalhit/1.1;line-poker/1.0“が返されます。
今回は、ユーザーエージェントを監視しておいて、初回のリクエストは無視するようにしました。
※Expressで構築しているので、ユーザーエージェント自体は const cnsUA = req.headers[‘user-agent’]; な感じで取得できます。
つまり、画面が表示されたときのリクエストは捨ててしまい、2回目以降のリクエストに応えるようにしました。
具体的には・・・ナイショですww

■まとめ
これがわかるまで結構時間潰しちゃいました。
今回は下記のキーワードで検索をしました。
「LINEメッセージでパラメータ付きのurlを送信すると、メッセージを開いたら自動的にコールされるのを防ぎたい」
まぁ、そのまんまやんですが(^^;
ChatGPTとも対話してみたんですが、なかなかこれと言った回答が引き出せなかったですね。。
まだまだ、ググるは有効です(^^)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です