Slide 1

Slide 1 text

LINE Messaging APIの概要 2022.6.23 植⽊ 悠⼆(うえぞう) LINE Developer Community LINE API総復習シリーズ | LINE Messaging API編

Slide 2

Slide 2 text

⾃⼰紹介 植⽊ 悠⼆(うえぞう) ホビープログラマー ⾼校卒業後に単⾝上京。バリスタの⾒習いをしながら独 学でプログラミングを習得。 損害保険会社および銀⾏にて各種DXプロジェクトの リードアーキテクトやプロダクトマネージャー等を歴任。 現在はコンピューター関連サービス企業にて⾦融機関向 けのDXコンサルティングに従事。 LINE BOT AWARDS(Twilio賞)、LINE BOOT AWARDS(Gatebox賞)、CLOVA Skill Awards(優秀 賞)等。2022年よりLINE API Expertとして活動。 uezo @uezochan

Slide 3

Slide 3 text

このセッションのねらい l 膨⼤なLINE Messaging APIリファレンス・ガイド群を読 み解くための道標となること l リファレンスに埋もれてしまっている便利な機能や特⻑、 使い⽅を再発⾒していただくこと l 以って、新たにLINE Bot開発に取り組んでいただいたり、 既に運⽤中のLINE Botの機能改善に繋げていただくこと

Slide 4

Slide 4 text

LINE Messaging APIのオーバービュー

Slide 5

Slide 5 text

Messaging APIの仕組み ① ユーザーが、LINE公式アカウントにメッセージを送信 ② LINEプラットフォームが、ボットサーバーのWebhook URLにWebhookイベントを送信 ③ ボットサーバーからユーザーにLINEプラットフォームを介して応答を送信 User こんにちは Hello Bot Server LINE Platform メッセージ イベント 応答 メッセージ (何らかの処理) Webhook URL Messaging API Endpoint(s)

Slide 6

Slide 6 text

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 など ⽇付選択 カメラ スタンプ など

Slide 7

Slide 7 text

Webhookとその設定⽅法 l メッセージ送信などのイベントが発⽣すると、LINEプラットフォームはボットサーバーのURLにイ ベント情報を送信 l ボットサーバーのURLはLINE DevelopersコンソールにてWebhook URLとして設定

Slide 8

Slide 8 text

# 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)

Slide 9

Slide 9 text

⾮同期によるイベント処理 l HTTPコネクション数を節約する観点から、LINEプラットフォームからのHTTPリクエストにはイベ ント処理を待たずにすぐに応答 l 「1秒以内に応答」はガイドラインから削除されたものの、後続イベント処理の遅延の観点からイベ ント処理の⾮同期化を推奨 LINE Bot Server (Webhook) LINE API HTTP POST HTTP POST 200 OK 200 OK ⼀瞬 Reply Events Bot Server (Worker) 署名 検証 処理 返信 キューやプールへ 投げ込み

Slide 10

Slide 10 text

参考:よくあるおうむ返し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"

Slide 11

Slide 11 text

参考:マルチスレッド処理おうむ返しの例(⾮同期処理) 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"

Slide 12

Slide 12 text

Webhookイベント

Slide 13

Slide 13 text

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間でシナリオを実⾏

Slide 14

Slide 14 text

メッセージイベント 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の値 を使⽤(全編共通。以後省略)

Slide 15

Slide 15 text

{ "destination": "xxxxxxxxxx", "events": [ { "type": "postback", ~中略~ "postback": { "data": "storeId=12345", "params": { "datetime": "2017-12-25T01:00" } } } ] } ポストバックイベント l ユーザーがポストバックアクションを実⾏したことを⽰すイベント l 任意の⽂字列であるポストバックデータや、⽇付時刻等のパラメーター情報が含まれる 使⽤例 p ユーザーがボタン押下により選択したアンケートの回答を受信する p 予約⽇時を受け取って管理システムに登録し、受付票を発⾏する l ポストバックアクションオブジェクト。data に任意のテキストデータを含むほか、アク ション実⾏時にトーク画⾯に表⽰されるテキ スト等を表⽰できる(詳細はアクションオブ ジェクトのセクション) l ⽇時選択やリッチメニュー切替アクショント リガーされたポストバックイベントのとき、 paramにそれらの情報が含まれる

Slide 16

Slide 16 text

フォローイベント l ユーザーがLINE公式アカウントを友だち追加またはブロック解除したことを⽰すイベント 使⽤例 p 友だち追加時のカスタムあいさつメッセージを送信する p 会話が始まる前に事前にユーザープロフィールを取得する { "destination": "xxxxxxxxxx", "events": [ { "type": "follow", ~中略~ "source": { "type": "user", "userId": "U4af4980629..." } } ] } l LINE公式アカウントを友だち追加したユー ザーのID。このIDを使⽤してプロフィールを 取得

Slide 17

Slide 17 text

メッセージオブジェクト

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

テキストメッセージ l ⽂字列によるシンプルなメッセージ l LINE絵⽂字を含むこともある 使⽤例 p おうむ返しなど、画像やボタンなどを含む必要のないメッセージ送受信 https://developers.line.biz/ja/docs/messaging-api/emoji-list/

Slide 20

Slide 20 text

イメージマップメッセージ l 画像や動画に任意のタップ領域を設定し、各種アクションをトリガーすることができるメッセージ l 画像の上での動画の再⽣や、動画再⽣後にリンク先を設定したラベルを表⽰することも可能 使⽤例 p キャンペーン情報などのグラフィカルな表⽰によるバナー p ビンゴカード、リバーシなどのボードゲーム

Slide 21

Slide 21 text

Flexメッセージ l CSS Flexible Boxに基づいてレイアウトを⾃由にカスタマイズできるメッセージ l 表現の幅が広がりユーザビリティも向上することから是⾮とも利⽤を検討いただきたい形式 使⽤例 p 予約や購⼊、申請などの受付票(更新などのアクションを含む) p グラフィカルな表現やアクションを含むおすすめ商品⼀覧の表⽰ https://developers.line.biz/flex-simulator/

Slide 22

Slide 22 text

アクションオブジェクト

Slide 23

Slide 23 text

アクションオブジェクト⼀覧 タイプ type値 説明 ポストバック postback 任意のデータを送信し、ポストバックイベントをトリガー メッセージ message テキストメッセージを送信 URI uri LINE内ブラウザーで指定されたURLを開く ⽇時選択 datetimepicker ⽇時選択ダイアログでユーザーが選択した⽇時を含むポストバックイベン トをトリガー カメラ camera カメラを起動(クイックリプライのみ) カメラロール cameraRoll カメラロールを起動(クイックリプライのみ) 位置情報 location 位置情報画⾯を起動(クイックリプライのみ) リッチメニュー 切替 richmenuswitch リッチメニューが変更された上で、そのエイリアスIDを含むポストバック イベントをトリガー

Slide 24

Slide 24 text

ポストバックアクション l 任意のデータをポストバックイベントとしてボットサーバーに送信するアクション l トーク上の表⽰メッセージ(メッセージイベント発⽕せず)やキーボードの挙動等も指定可能 使⽤例 p カルーセルで複数表⽰したおすすめアイテムの購⼊ p 受付票に表⽰したボタンからの予約のキャンセル { "type": "postback", "label": "Buy", "data": "action=buy&itemid=111", "displayText": "Buy", "inputOption": "openKeyboard", "fillInText": "---¥nName: ¥nPhone: ¥nBirthday: ¥n---" }

Slide 25

Slide 25 text

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/

Slide 26

Slide 26 text

メッセージ

Slide 27

Slide 27 text

メッセージ処理⼀覧 カテゴリー タイプ 説明 基本 応答メッセージ送信 ユーザーやグループ/複数⼈トークからのイベントに対して応答 メッセージを送信 プッシュメッセージ送信 ユーザーやグループ/複数⼈トークにメッセージを送信 ⼀括送信 マルチキャスト送信 複数のユーザーIDにメッセージを送信 ナローキャスト送信 特定の属性(性別や年齢、地域等)のユーザーにメッセージを送信 ナローキャスト進⾏状況 ナローキャストメッセージの配信状況を確認 ブロードキャスト送信 友だちになっている全てのユーザーにメッセージを送信 利⽤統計 追加メッセージ数上限 当⽉分の上限⽬安を取得 当⽉メッセージ利⽤状況 当⽉に送信されたメッセージ数を取得 応答メッセージ送信数 特定の⽇に送信された応答メッセージの数を取得 プッシュメッセージ送信数 特定の⽇に送信されたプッシュメッセージの数を取得 マルチキャスト送信数 特定の⽇に送信されたマルチキャストメッセージの数を取得 ブロードキャスト送信数 特定の⽇に送信されたブロードキャストメッセージの数を取得 リトライ APIリクエスト再試⾏ メッセージ送信の再送。重複送信防⽌機能つき

Slide 28

Slide 28 text

その他の論点

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

プロフィールの取得 l プロフィール情報の取得。表⽰名、ユーザーID、⾔語、アイコンURL、ステータスメッセージ l 友だち追加しているまたはメッセージ送信したことのあるユーザーが対象 使⽤例 p 友だち追加時に名前つきで挨拶する p 相⼿の利⽤⾔語にあわせてBotの利⽤⾔語を変える { "displayName":"LINE taro", "userId":"U4af4980629...", "language":"en", "pictureUrl":"https://obs.line-apps.com/...", "statusMessage":"Hello, LINE!" }

Slide 31

Slide 31 text

退出 l 参加しているグループトークや複数⼈トークからの退出 l 邪魔になったりBotの参加を不審に思うグループメンバーがいる場合に備える 使⽤例 p グループ参加時のメッセージにBotを退出させる⽅法を明記の上、退出させられるようにする $ curl -v -X POST https://api.line.me/v2/bot/group/{groupId}/leave -H 'Authorization: Bearer {channel access token}'

Slide 32

Slide 32 text

分析と管理 カテゴリー タイプ 説明 基本 メッセージ送信数取得 友だち数取得 友だち属性統計情報取得 ユーザー操作統計情報取得 オーディエ ンス管理 ユーザーIDアップロード⽤作成(JSON/ファイル) ユーザーIDアップロード⽤追加(JSON/ファイル) クリックリターゲティング⽤作成 インプレッションリターゲティング⽤作成 名称変更変更 有効化 削除 情報取得(1つor複数) 権限レベル取得 権限レベル変更

Slide 33

Slide 33 text

まとめ

Slide 34

Slide 34 text

このセッションのねらい(再掲) l 膨⼤なLINE Messaging APIリファレンス・ガイド群を読 み解くための道標となること l リファレンスに埋もれてしまっている便利な機能や特⻑、 使い⽅を再発⾒していただくこと l 以って、新たにLINE Bot開発に取り組んでいただいたり、 既に運⽤中のLINE Botの機能改善に繋げていただくこと

Slide 35

Slide 35 text

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 など ⽇付選択 カメラ スタンプ など

Slide 36

Slide 36 text

ご静聴ありがとうございました👋 植⽊悠⼆ / うえぞう uezo @uezochan