# メッセージ(Webhook)を受信する

ユーザーが、LINE公式アカウントを友だち追加したり、LINE公式アカウントにメッセージを送ったりすると、LINE Developersコンソールの「Webhook URL」に指定したURL(ボットサーバー)に対して、LINEプラットフォームからWebhookイベントオブジェクトを含むHTTP POSTリクエストが送られます。

ボットサーバーで、Webhookイベントオブジェクトを正しく処理してください。

ボットサーバーで受信したHTTP POSTリクエストを軽々しく信用しないでください

ボットサーバーが受信したHTTP POSTリクエストは、LINEプラットフォームから送信されていない危険なリクエストの可能性があります。

署名を検証してから、Webhookイベントオブジェクトを処理してください。

イベント処理を非同期化することを推奨します

HTTP POSTリクエストの処理が後続のイベントの処理に遅延を与えないよう、イベント処理を非同期化することを推奨します。

# 署名を検証する

リクエストがLINEプラットフォームから送られたことを確認するために、ボットサーバーでリクエストヘッダーのX-Line-Signatureに含まれる署名を検証します。

  1. チャネルシークレットを秘密鍵として、HMAC-SHA256アルゴリズムを使用してリクエストボディのダイジェスト値を取得します。
  2. ダイジェスト値をBase64エンコードした値と、リクエストヘッダーのX-Line-Signatureに含まれる署名が一致することを確認します。

Python®で署名の検証を実装する例は以下のとおりです。

import base64
import hashlib
import hmac

channel_secret = '...' # Channel secret string
body = '...' # Request body string
hash = hmac.new(channel_secret.encode('utf-8'),
    body.encode('utf-8'), hashlib.sha256).digest()
signature = base64.b64encode(hash)
# Compare X-Line-Signature request header and the signature

詳細とコードサンプルについては、『Messaging APIリファレンス』の「署名を検証する」を参照してください。

# Webhookイベントのタイプ

Webhookイベントオブジェクトに含まれるデータに基づいて、ボットの動作を制御したり、ユーザーの要求に答えたりできます。

# 1対1のトークでのWebhookイベント

1対1のトークでは以下のWebhookイベントを受信できます。詳しくは、『Messaging APIリファレンス』の「Webhookイベントオブジェクト」を参照してください。

イベントタイプ 説明
メッセージイベント ユーザーがメッセージを送信したことを示すイベントです。このイベントには応答できます。
フォローイベント LINE公式アカウントが友だち追加またはブロック解除されたことを示すイベントです。このイベントには応答できます。
フォロー解除イベント LINE公式アカウントがブロックされたことを示すイベントです。
参加イベント LINE公式アカウントがグループまたはトークルームに参加したことを示すイベントです。このイベントには応答できます。
退出イベント ユーザーがグループからボットを削除したか、ボットがグループまたはトークルームから退出したことを示すイベントです。
メンバー参加イベント ボットがメンバーになっているグループまたはトークルームにユーザーが参加したことを示すイベントです。このイベントには応答できます。
メンバー退出イベント ボットがメンバーになっているグループまたはトークルームからユーザーが退出したことを示すイベントです。
ポストバックイベント ユーザーが、ポストバックアクションを実行したことを示すイベントです。このイベントには応答できます。
動画視聴完了イベント ユーザーが、LINE公式アカウントから送信されたtrackingIdが指定された動画メッセージの視聴を完了したことを示すイベントです。このイベントには応答できます。
ビーコンイベント ビーコンの電波の受信圏にユーザーが入ったことを示すイベントです。このイベントには応答できます。詳しくは、「ビーコンを使う」を参照してください。
アカウント連携イベント ユーザーがLINEアカウントとプロバイダーが提供するサービスのアカウントを連携したことを示すイベントです。このイベントには応答できます。詳しくは、「ユーザーアカウントを連携する」を参照してください。

# グループチャットでのWebhookイベント

グループチャットに特有のWebhookイベントについて詳しくは、「グループチャット」を参照してください。

# LINE ThingsでのWebhookイベント

LINE Thingsに特有のWebhookイベントもあります。

イベントタイプ 説明
デバイス連携イベント ユーザーの操作により、デバイスとLINEが連携されたことを示すイベントです。
デバイス連携解除イベント ユーザーの操作により、デバイスとLINEの連携が解除されたことを示すイベントです。
LINE Thingsシナリオ実行イベント 自動通信のシナリオが実行されたことを示すイベントです。

# ユーザーが送ったコンテンツを取得する

ユーザーが送った画像、動画、音声、およびファイルを、ボットサーバーで取得できます。

リクエストの例

curl -v -X GET https://api-data.line.me/v2/bot/message/{messageId}/content \
-H 'Authorization: Bearer {channel access token}'

詳しくは、『Messaging APIリファレンス』の「コンテンツを取得する」を参照してください。

注意
  • ユーザーが送ったコンテンツは一定期間後、自動的に削除されます。
  • ユーザーが送信したテキストを取得するAPIはありません。

# ユーザープロフィール情報を取得する

Webhookイベントオブジェクトには、ユーザーIDが含まれています。このユーザーIDを使用すると、ユーザーのLINEプロフィール情報(ユーザーの表示名、ユーザーID、プロフィール画像のURL、ステータスメッセージ)を取得できます。

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/profile/{userId} \
-H 'Authorization: Bearer {channel access token}'

成功した場合、JSONオブジェクトが返されます。

{
    "displayName":"LINE Botto",
    "userId":"U4af4980629...",
    "pictureUrl":"https://obs.line-apps.com/...",
    "statusMessage":"Hello world!"
}

詳しくは、『Messaging APIリファレンス』の「プロフィールを取得する」を参照してください。