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

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

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

セキュリティ上の警告

ボットサーバーが受信した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イベントオブジェクトに含まれるデータに基づいて、ボットの動作を制御したり、ユーザーの要求に答えたりできます。 詳しくは、『Messaging APIリファレンス』の「Webhookイベントオブジェクト」を参照してください。

# 1対1のトークまたはグループチャットでのWebhookイベント

1対1のトークやグループチャットでは、ユーザーの操作に応じて、以下のWebhookイベントを受信します。

イベントタイプ 説明 1対1のトーク グループチャット
メッセージイベント ユーザーがメッセージを送信したことを示すイベントです。このイベントには応答できます。
送信取消イベント ユーザーがグループまたはトークルームで、メッセージの送信を取り消したことを示すイベントです。
フォローイベント LINE公式アカウントが友だち追加またはブロック解除されたことを示すイベントです。このイベントには応答できます。
フォロー解除イベント LINE公式アカウントがブロックされたことを示すイベントです。
参加イベント LINE公式アカウントがグループまたはトークルームに参加したことを示すイベントです。このイベントには応答できます。
退出イベント ユーザーがグループからLINE公式アカウントを削除したか、LINE公式アカウントがグループまたはトークルームから退出したことを示すイベントです。
メンバー参加イベント LINE公式アカウントがメンバーになっているグループまたはトークルームに、ユーザーが参加したことを示すイベントです。このイベントには応答できます。
メンバー退出イベント LINE公式アカウントがメンバーになっているグループまたはトークルームから、ユーザーが退出したことを示すイベントです。
ポストバックイベント ユーザーが、ポストバックアクションを実行したことを示すイベントです。このイベントには応答できます。
動画視聴完了イベント ユーザーが、LINE公式アカウントから送信されたtrackingIdが指定された動画メッセージの視聴を完了したことを示すイベントです。このイベントには応答できます。

✅:受信する ❌:受信しない

# LINE ThingsでのWebhookイベント

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

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

# その他のWebhookイベント

ビーコンを利用しているときに送信されるWebhookイベントや、Messaging APIを利用したアカウント連携が行われたときに送信されるWebhookイベントもあります。

イベントタイプ 説明
ビーコンイベント ビーコンの電波の受信圏にユーザーが入ったことを示すイベントです。このイベントには応答できます。詳しくは、「ビーコンを使う」を参照してください。
アカウント連携イベント ユーザーがLINEアカウントとプロバイダーが提供するサービスのアカウントを連携したことを示すイベントです。このイベントには応答できます。詳しくは、「ユーザーアカウントを連携する」を参照してください。

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

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

リクエストの例

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リファレンス』の「プロフィールを取得する」を参照してください。