1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LINEのWebhookの仕組みに関するメモ

1
Posted at

LINEプラットフォーム上のアプリの可能性

メッセージの送受信、通話アプリとして有名なLINEですが、実は公式アカウントを中心とした開発プラットフォームがかなり整備されています。
LINEの開発プラットフォームには以下のような特性があることから、色々な可能性があると思っています。

  • LINEという日常に溶け込んだインターフェースを使える
    入力情報の収集や通知が受け入れられやすい
  • 色々な情報を受け取ることができる
    テキスト、画像、音声、動画、位置情報など
  • バックエンドの処理は自由に設計することができる
    LINEと繋がるAPI部分のみが提供されているので、それ以外は好きに構築できる

その中心となる仕組みがユーザーへ能動的にメッセージを送信するMessaging APIと、ユーザーからのアクションを受け取るWebhookの仕組みです。

LINEのWebhook

LINE公式アカウントでMessaging APIを利用すると使えるようになる機能の一つです。
公式アカウントにユーザーからアクションがあった際に、その内容を知らせるリクエストが指定したWebhook URLに送信されます。

Webhookで送信されるリクエストの中身

リクエストBodyのeventsに色々な情報が詰まってきます。
eventごとのtypeという属性を確認することで、どんなイベントなのかを識別することができます。

  • follow
    友達追加もしくはブロック解除
  • unfollow
    ブロック
  • message
    メッセージの受信

全てのイベントにはuseridが付与されているので、どのユーザーのイベントなのかが識別できます。
messageはさらにmessage内のtypeを確認することでどんなメッセージなのかを識別することができます。

  • text
    テキストメッセージ。
    送信されてきたテキストの内容もmessageの中に含まれています。

  • sticker
    スタンプメッセージ。
    packageId、stickerId というスタンプを識別する情報が送られてくるので、どのスタンプが送信されたのかを識別することができます。
    さらにkeywordsという形でどのような内容のスタンプなのかが大まかに掴めるようになっています。
    "keywords":["wonderful","Awesome","Yay","go out","Wow","Dog","good"]

  • image
    画像メッセージ。
    画像のバイナリはmessageのidを利用して別のAPIで取得することができます。

  • audio
    ボイスメッセージ。
    音声のバイナリは画像と同様にmessageのidを利用して別のAPIで取得することができます。

  • video
    動画メッセージ。
    こちらも同様にバイナリ取得可能。

  • location
    位置情報メッセージ。
    経度緯度のポイント情報と、それを使って送信前に割り出された住所の情報も含まれています。

他にも連絡先やKeepメモの内容を送信したりすることができるようです。

また、ヘッダーの x-line-signature には公式アカウントごとのシークレットを使って、リクエストの内容をハッシュ化したものが送られてくるので、これを利用してリクエストの内容に改竄がないかを検証できます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?