Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LINE Messaging APIの概要 - LINE API総復習シリーズ

uezo
June 24, 2022

LINE Messaging APIの概要 - LINE API総復習シリーズ

2022.6.23 LINE Developer CommunityによるLINE API総復習シリーズのLINE Messaging API編にて、概要をお話しさせていただいたセッション資料です。膨大な公式ドキュメントを読む際のインデックスとしてご活用ください。

セッション動画▶️ https://www.youtube.com/watch?v=L_9uhu_vl-4

uezo

June 24, 2022
Tweet

More Decks by uezo

Other Decks in Programming

Transcript

  1. Messaging APIの仕組み ① ユーザーが、LINE公式アカウントにメッセージを送信 ② LINEプラットフォームが、ボットサーバーのWebhook URLにWebhookイベントを送信 ③ ボットサーバーからユーザーにLINEプラットフォームを介して応答を送信 User

    こんにちは Hello Bot Server テキストメッセージ こんにちは text: テキストメッセージ Hello text: LINE Platform メッセージ メッセージイベント メッセージ応答 メッセージ 翻訳の応答を作成 Webhook URL Messaging API Endpoint(s) メッセージ 参加 ポストバック 各種イベントタイプ 応答 プッシュ マルチキャスト 各種メッセージ処理 など など テキスト 画像 各種メッセージタイプ など テンプレート ポストバック 各種アクションタイプ など Flex メッセージ URI など ⽇付選択 カメラ スタンプ など
  2. # Python SDK(署名検証がパース処理に含まれる) parser = linebot.WebhookParser("YOUR_CHANNEL_SECRET") try: events = parser.parse(body,

    request.headers.get("x-line-signature")) except InvalidSignatureError: abort(400) 署名の検証 l ボットサーバーへのリクエストが本当にLINEプラットフォームからのものであることの確認 l リクエストヘッダーの「x-line-signature」に含まれる署名と、チャネルシークレットを秘密鍵とし て取得したリクエストボディのダイジェスト値とが⼀致することを確認 l 各⾔語向けのSDKを使⽤することで上記⼿続きの詳細は隠蔽されるが、イベントのパース処理に署 名検証を含むものと事前に別途検証が必要なものとが⾔語により異なるため注意が必要 # Ruby SDK(署名検証をパース処理前に別途⾏う) signature = request.env['HTTP_X_LINE_SIGNATURE’] unless client.validate_signature(body, signature) error 400 do 'Bad Request' end end events = client.parse_events_from(body)
  3. 参考:よくあるおうむ返しBotの例(同期処理) def handle_webhook(): # リクエストからイベントをパース events = line_parser.parse( request.data.decode("utf-8"), request.headers.get("x-line-signature")

    ) for ev in events: # ⼊⼒内容をそのままおうむ返し送信 line_api.reply_message( ev.reply_token, TextSendMessage(text=ev.message.text) ) # LINEのWebhook送信元へHTTP200を応答 return "ok"
  4. 参考:マルチスレッド処理おうむ返しの例(⾮同期処理) from concurrent.futures import ThreadPoolExecutor executor = ThreadPoolExecutor(thread_name_prefix="LineEvent") def process_events(data,

    signature): # 署名の検証とイベントデータのパース events = line_parser.parse(data, signature) for ev in events: # ⼊⼒内容をそのままおうむ返し送信 line_api.reply_message( ev.reply_token, TextSendMessage(text=ev.message.text) ) @app.route("/path/to/webhook”, methods=["POST"]) def handle_webhook(): # リクエストデータと署名をスレッドプールにお渡し executor.submit( process_events, request.data.decode("utf-8"), request.headers.get(”x-line-signature") ) # 直ちにLINEに応答を返す return "ok"
  5. Webhookイベント⼀覧 カテゴリー タイプ type値 説明 インタラク ション メッセージ message ユーザーがメッセージを送信

    送信取消 unsend ユーザーが送信したメッセージを取り消し ポストバック postback ユーザーがポストバックアクションを実⾏ 動画視聴完了 videoPlayComplete ユーザーが動画を最後まで視聴 関係 フォロー follow ユーザーがLINE公式アカウントを友だち追加 フォロー解除 unfollow ユーザーがLINE公式アカウントをブロック アカウント連携 accountLink ユーザーがLINE公式アカウントをサービスに連携 グループ 参加 join LINE公式アカウントがグループ/複数⼈トークに参加 退出 leave LINE公式アカウントがグループ/複数⼈トークから退出 メンバー参加 memberJoined グループ/複数⼈トークにユーザーが参加 メンバー退出 memberLeft グループ/複数⼈トークからユーザーが退出 IoT ビーコン beacon ユーザーがビーコンの電波受信圏に⼊った デバイス連携 things ユーザーがLINEとデバイスを連携 デバイス連携解除 things ユーザーがLINEとデバイスの連携を解除 シナリオ実⾏ things デバイス・LINE間でシナリオを実⾏
  6. メッセージイベント l ユーザーがLINE公式アカウントにメッセージを送信したことを⽰すイベント l メッセージオブジェクトのデータを含み、テキストに加えて画像や動画、その他ファイル等も受信 使⽤例 p ユーザーから受信したテキストを翻訳する p ユーザーから受信した画像に含まれるQRコードを読み取ってURLを表⽰する

    { "destination": "xxxxxxxxxx", "events": [ { "type": "message", "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", ~中略~ "message": { "id": "325708", "type": "text", "text": "@example Hello, world! (love)" } } ] } l メッセージオブジェクト。テキストや画像な ど、種類によってフィールドが異なる(詳細 はメッセージオブジェクトのセクション) l テキストメッセージにはLINE絵⽂字やメン ション情報を含む場合がある l 返信にはイベントに含まれるreplyTokenの値 を使⽤(全編共通。以後省略)
  7. { "destination": "xxxxxxxxxx", "events": [ { "type": "postback", ~中略~ "postback":

    { "data": "storeId=12345", "params": { "datetime": "2017-12-25T01:00" } } } ] } ポストバックイベント l ユーザーがポストバックアクションを実⾏したことを⽰すイベント l 任意の⽂字列であるポストバックデータや、⽇付時刻等のパラメーター情報が含まれる 使⽤例 p ユーザーがボタン押下により選択したアンケートの回答を受信する p 予約⽇時を受け取って管理システムに登録し、受付票を発⾏する l ポストバックアクションオブジェクト。data に任意のテキストデータを含むほか、アク ション実⾏時にトーク画⾯に表⽰されるテキ スト等を表⽰できる(詳細はアクションオブ ジェクトのセクション) l ⽇時選択やリッチメニュー切替アクショント リガーされたポストバックイベントのとき、 paramにそれらの情報が含まれる
  8. フォローイベント l ユーザーがLINE公式アカウントを友だち追加またはブロック解除したことを⽰すイベント 使⽤例 p 友だち追加時のカスタムあいさつメッセージを送信する p 会話が始まる前に事前にユーザープロフィールを取得する { "destination":

    "xxxxxxxxxx", "events": [ { "type": "follow", ~中略~ "source": { "type": "user", "userId": "U4af4980629..." } } ] } l LINE公式アカウントを友だち追加したユー ザーのID。このIDを使⽤してプロフィールを 取得
  9. タイプ type値 説明 テキスト text ⽂字列のメッセージ スタンプ sticker スタンプ。対象のIDを指定 画像

    image 画像(JPEGまたはPNG)。URLを指定 動画 video 動画(MP4)。URLを指定 ⾳声 audio ⾳声(M4A)。URLを指定 位置情報 location 位置情報。住所や緯度。経度等を指定 イメージマップ imagemap 画像や動画に任意のタップ領域を設定し、タップにより各種アクションをトリ ガーすることができるメッセージ テンプレート template Yes/Noの確認やカルーセルなど定義済みのレイアウトの中⾝をカスタマイズし て利⽤するメッセージ Flex flex CSS Flexible Boxに基づいてレイアウトを⾃由にカスタマイズできるメッセージ メッセージオブジェクト⼀覧
  10. アクションオブジェクト⼀覧 タイプ type値 説明 ポストバック postback 任意のデータを送信し、ポストバックイベントをトリガー メッセージ message テキストメッセージを送信

    URI uri LINE内ブラウザーで指定されたURLを開く ⽇時選択 datetimepicker ⽇時選択ダイアログでユーザーが選択した⽇時を含むポストバックイベン トをトリガー カメラ camera カメラを起動(クイックリプライのみ) カメラロール cameraRoll カメラロールを起動(クイックリプライのみ) 位置情報 location 位置情報画⾯を起動(クイックリプライのみ) リッチメニュー 切替 richmenuswitch リッチメニューが変更された上で、そのエイリアスIDを含むポストバック イベントをトリガー
  11. URIアクション l LINE内ブラウザーで指定されたURLを開くアクション l http(s)やtelのほか、LINE URLスキームが設定できるためLINEの各種機能も利⽤可能 使⽤例 p カルーセルで表⽰した商品⼀覧のボタンから公式Webページを表⽰する p

    トーク画⾯に表⽰した予約受付票のボタンから予約内容を変更するためのLIFFアプリを開く // LINE内ブラウザで指定のURLを開く例 { "type": "uri", "label": "メニューを⾒る", "uri": "https://example.com/menu" } // LINE URLスキームでLINE公式アカウントをシェアする例 { "type": "uri", "label": "友だちに勧める", "uri": "https://line.me/R/nv/recommendOA/@linedevelopers" } l カメラとカメラロールを開いて画像を送る l 位置情報を送る l LINE公式アカウントをシェアする l LINE公式アカウントのLINE VOOMやプロフィールを開く l テキストメッセージを送る l プロフィール情報を開く l その他の画⾯を開く l 設定画⾯を開く l スタンプショップを開く l 着せかえショップを開く l LINE Outで発信する l LIFFアプリを開く l URLを外部ブラウザで開く LINEで利⽤できるURLスキーム https://developers.line.biz/ja/docs/messaging-api/using-line-url-scheme/
  12. メッセージ処理⼀覧 カテゴリー タイプ 説明 基本 応答メッセージ送信 ユーザーやグループ/複数⼈トークからのイベントに対して応答 メッセージを送信 プッシュメッセージ送信 ユーザーやグループ/複数⼈トークにメッセージを送信

    ⼀括送信 マルチキャスト送信 複数のユーザーIDにメッセージを送信 ナローキャスト送信 特定の属性(性別や年齢、地域等)のユーザーにメッセージを送信 ナローキャスト進⾏状況 ナローキャストメッセージの配信状況を確認 ブロードキャスト送信 友だちになっている全てのユーザーにメッセージを送信 利⽤統計 追加メッセージ数上限 当⽉分の上限⽬安を取得 当⽉メッセージ利⽤状況 当⽉に送信されたメッセージ数を取得 応答メッセージ送信数 特定の⽇に送信された応答メッセージの数を取得 プッシュメッセージ送信数 特定の⽇に送信されたプッシュメッセージの数を取得 マルチキャスト送信数 特定の⽇に送信されたマルチキャストメッセージの数を取得 ブロードキャスト送信数 特定の⽇に送信されたブロードキャストメッセージの数を取得 リトライ APIリクエスト再試⾏ メッセージ送信の再送。重複送信防⽌機能つき
  13. ユーザーとグループ カテゴリー タイプ 説明 ユーザー プロフィール情報取得 プロフィール情報の取得。友だち追加しているまたはメッセージ送 信したことのあるユーザーが対象 友だちユーザーリスト取得 LINE公式アカウントを友だち追加したユーザーのIDリストを取得

    (認証済みアカウントまたはプレミアムアカウントのみ利⽤可能) グループと 複数⼈トー ク 概要取得(グループのみ) グループID、グループ名、アイコンのURLを取得 メンバー数取得(グループ・ 複数⼈) 参加しているユーザーの⼈数。公式アカウントは除く メンバーのユーザーID取得 (グループ・複数⼈) 参加しているユーザーIDの⼀覧(認証済みアカウントまたはプレミ アムアカウントのみ利⽤可能) メンバーのプロフィール取得 (グループ・複数⼈) 参加しているユーザーのプロフィール 退出(グループ・複数⼈) グループ/複数⼈トークからの退出 ボット ボット情報取得 LINE Botの基本情報。ユーザーIDや表⽰名などを含む
  14. 分析と管理 カテゴリー タイプ 説明 基本 メッセージ送信数取得 友だち数取得 友だち属性統計情報取得 ユーザー操作統計情報取得 オーディエ

    ンス管理 ユーザーIDアップロード⽤作成(JSON/ファイル) ユーザーIDアップロード⽤追加(JSON/ファイル) クリックリターゲティング⽤作成 インプレッションリターゲティング⽤作成 名称変更変更 有効化 削除 情報取得(1つor複数) 権限レベル取得 権限レベル変更
  15. Messaging APIの仕組み(再掲) ① ユーザーが、LINE公式アカウントにメッセージを送信 ② LINEプラットフォームが、ボットサーバーのWebhook URLにWebhookイベントを送信 ③ ボットサーバーからユーザーにLINEプラットフォームを介して応答を送信 User

    こんにちは Hello Bot Server テキストメッセージ こんにちは text: テキストメッセージ Hello text: LINE Platform メッセージ メッセージイベント メッセージ応答 メッセージ 翻訳の応答を作成 Webhook URL Messaging API Endpoint(s) メッセージ 参加 ポストバック 各種イベントタイプ 応答 プッシュ マルチキャスト 各種メッセージ処理 など など テキスト 画像 各種メッセージタイプ など テンプレート ポストバック 各種アクションタイプ など Flex メッセージ URI など ⽇付選択 カメラ スタンプ など