LINE Messaging API オーバービュー 【LINE API Expert Guide】
自己紹介
LINEMessaging APIの概要ということで、総復習らしく全体像を見ていきたいなと思います。よろしくお願いします。私、植木と申します。こういった開発の活動のときは「うえぞう」という名義でやらせていただいてます。LINEの開発コミュニティーは、2017年から続けておりまして、今年LINE API Expertに入らせていただきました。
Messaging APIのリファレンス・ガイドはわかりやすいけど量が多い
Messaging APIのリファレンス・ガイドめちゃくちゃ分かりやすいんですけど、とにかく量が多いんですよね。Messaging APIの画面なんですけども、多いですよね。APIのリファレンス見てみても、左のメニューとかこれを一つ一つ展開してみても、ざーっとめちゃくちゃ出てくるんでどこから読んでいいかが分からない。とにかくこのMessaging APIを読み解いていくための「道しるべ」これを皆さんに共有させていただきたい。
この話の狙い
あれだけ量はありますので、再発見するきっかけにしていただきたい。そういったのを見つけると使ってみたいなとか思うじゃないですか。そういったものを使って、開発に取り組んでいただけるようになったらなといったふうに思います。こういったところを意識してお話をさせていただきたいと思います
Messaging APIのオーバービュー
まずMessaging APIのオーバービューをお話します。この辺はブログとかもあるので、流していきたいんですけれども、まずMessaging APIの仕組み左からユーザーがクライアントで「こんにちは」話しかけると、このメッセージがLINE Platformの方で受けられて、そしてイベントという形になって、WebhookのURLに飛んできますと。それをBOTサーバーの方でなんらか処理をして、Messaging APIの方にもう一度応答する。すると、LINE platfromの方でユーザーの方にメッセージとして返していく、こういった一連の流れになっています。
これが今、図の方でお示しした1連の流れになっておりますと。これがいわゆるオウム返しの一番基本的な流れなんですけれども、こことドキュメントがどう紐づいているのかといったところをマッピングしてみました。それがこちらです。
LINE Messaging API概観
メッセージイベント
メッセージだけじゃないんですね、いろんなイベントがLINEプラットフォームからBOTサーバーの方に飛んできます。ユーザーがそのグループに参加した、ポストバックイベント、いろんなイベント飛んでくる。ここの種類をAPIドキュメントの方でたくさん書いてある。
メッセージタイプ
そしてこの受け付けたこのメッセージ、メッセージの中にも"はろー"と文字列だけのテキストメッセージだったり、当然画像だったり、後ほど詳しくお話ししますけれども、Flex Messageだったりスタンプだったり、こういった「メッセージの種類」がいろいろあるんですよ。これもまた一つバリエーションのあるところです。
アクションタイプ
先程リッチメニューのところでやりましたけれども、右下各種アクションタイプと書いてますけれども、ポストバッグだったり、ポストバック以外も例えば、日付の選択だったり、カメラだったり色んな種類のアクションが実はあったりします。
メッセージ応答
そして最後、メッセージ応答と書いてある下に応答だけじゃなくプッシュで任意のタイミングで送ってくるタイプもありますし一斉送信みたいなこともあったりといろんなバリエーションがある。今日はこの4つの分野についてそれぞれ見ていきたいなという風に思っています。代表的なものをいくつかピックアップして、後ほど皆様が気になるところは調べていただければなと思っております。
署名の検証
最初にMessaging API、共通的なお話を少ししてまいります。重要な論点ですけれども署名の検証ですね、先程の図でもボットサーバーが何かwebhookを受け付けてますと。これLINEからwebhookが必ず来るとは限らないですね。悪いやつがいてwebhookっていうところに何か悪いアクセスしてくるかもしれないんで、これをちゃんと防ぎましょうっていう話。LINEのサーバーってIPアドレスをこのIPアドレスから来ますよみたいなそういった保証がなかったりしますので、必ずアプリケーションのレイヤーに本当にLINEから来たことを確かめる必要があります。
ここのリクエストボディのダイジェスト値とか2点目のところで書いているんですけれどもこの辺の詳しいところは実際にやり方は、あんまり理解してしなくても基本的には各言語のSDKやってくれるので、基本的に大丈夫なんですけれども、注意しなければいけないのが署名検証ですね。このイベントをオブジェクトとして扱おうとした時に、勝手にやってくれるSDKと自分でやんなきゃいけないSDKがあってで、PythonSDKは署名検証もやってくれるので、あまり気にしなくていいんですけれども、例えばRubyのSDKは自分でやらなきゃいけないんですね。ここは自身が使われてるSDK中でどうなのかを見ていただければと思います。HTTP requestのボディーからパースするタイミングでここでシグニチャを渡してるのかどうかっていうことで判別できるかと思いますので、ぜひ確認していただけたらと思います。
非同期によるイベント処理
2点目は非同期によるイベント処理というところで、LINEからイベント飛んできますと。イベント処理して返信を返して、その後にLINEのサーバーに200のレスポンスを返すというやり方だと、その間、ずっとこのHTTPのセッション張りっぱなしになっちゃうんで、リソース管理の観点からもよくなかったりするので、望ましいのはこのイベントも受け取ったらもう一回のLINEサーバーには受け取ったよ、とこの200返して、その後でイベントの処理をやっていくこういった形にしていきましょうね、とガイドラインでも通知をされてますので、ぜひそういったことをやっていきましょう。サンプルコードつけてますんで、気になる方は後ほど見ておいていただければと思います。
ここから先が本丸の部分に移っていきたいと思います。
LINE Developer CommunityはLINE APIに関連する最新情報や開発Tipsを共有するコミュニティです。この記事は2022年6月に行われた【LINE API総復習シリーズ】Messaging API編【LINE API Expert出演】の内容が広く知れ渡ってほしい内容だったため、書き起こした記事になります。
Discussion