# Messaging API開発ガイドライン
ボット開発を始める前に、Messaging APIを使ったボット開発について、何が禁止され、何が推奨されているかを学びましょう。
禁止事項
- LINEプラットフォームへの大量リクエストの禁止
- LINEプラットフォームを経由した負荷テストの禁止
- 同一ユーザーへの大量送信の禁止
- 存在しないユーザーIDへのリクエストの禁止
- ユーザーの属性を特定する行為の禁止
- IPアドレスによるアクセス制限の禁止
推奨事項
ボット開発における基本ルールは規約とポリシーに基づきます。
# 禁止事項
# LINEプラットフォームへの大量リクエストの禁止
負荷テストや動作テストを目的に、LINEプラットフォームへ、大量のリクエストを送信しないでください。いかなる場合でも、リクエスト数は指定されたレート制限以下に抑えてください。レート制限を超えて送信を行った場合、429 Too Many Requests
エラーとなります。
レート制限内であっても以下のようなリクエストを高頻度で行わないでください。
- 実際にナローキャスト配信に利用しないにもかかわらずオーディエンスの作成と削除を高頻度で繰り返し行う行為
- Messaging APIの機能を利用しないリクエストを高頻度で繰り返し行う行為
# LINEプラットフォームを経由した負荷テストの禁止
LINEプラットフォームから、ボットサーバーの負荷テストを行うサービスはありません。ボットサーバーの負荷テストを目的に、LINEプラットフォームを経由して大量のメッセージを送信しないでください。ボットサーバーの負荷テストを行うための環境は、別途用意してください。
# 同一ユーザーへの大量送信の禁止
いかなる場合でも、同一ユーザーへメッセージを大量送信しないでください。
# 存在しないユーザーIDへのリクエストの禁止
存在しないユーザーIDへのリクエストを送信しないでください。
# ユーザーの属性を特定する行為の禁止
特定のユーザーIDに対して、ユーザーの属性を特定する行為は行わないでください。また、ユーザーの属性を特定する目的でオーディエンス管理のAPIを利用したり、ナローキャストメッセージを配信したりしないでください。
# IPアドレスによるアクセス制限の禁止
Webhookを受信するボットサーバーにおいて、Webhookリクエスト送信元のLINEプラットフォームのIPアドレスでアクセス制限をしないでください。LINEプラットフォームのIPアドレスは開示していません。また、IPアドレスは予告なく変更される場合があります。不正なアクセス元からのリクエストを拒否したい場合は、IPアドレスによる制限ではなく、Webhookの署名の検証を実施してください。
# 推奨事項
# 送信取消イベント受信時に推奨する処理
ユーザーがメッセージの送信を取り消すと、ボットサーバーに送信取消イベントが届きます。
送信取消イベントを受け取った場合、サービス提供者はユーザーがメッセージの送信を取り消した意図を尊重し、以降は対象のメッセージを見たり利用したりできないよう、最大限の配慮を持って対象のメッセージを適切に扱うことを推奨します。
詳しくは、「送信取消イベント受信時の処理」を参照してください。
# Webhook受信時の署名検証の推奨
ボットサーバーでWebhookを受信した際は、Webhookイベントオブジェクトを処理する前に、リクエストヘッダーに含まれる署名を検証することを推奨します。署名の検証は、開発者のボットサーバーに届いたリクエストが「LINEプラットフォームから送信されたWebhookか」および「通信経路で改ざんされていないか」などを確認するための重要な手順です。
詳しくは、「Webhookの署名を検証する」を参照してください。
# 非破壊的な変更を想定した実装の推奨
Messaging APIでは、非破壊的な機能追加が行われることがあります。これらの変更は、既存の機能を壊すことなく、APIを拡張することを目的としています。このため以下のような変更は、事前の予告なく実施されることがあります。
- 新しいエンドポイントの追加
- APIリクエストにおける省略可能なパラメータやフィールド、ヘッダーの追加
- APIレスポンスにおけるフィールドやヘッダーの追加
- Webhookイベントオブジェクトへのプロパティの追加
- APIレスポンスおよびWebhookイベントオブジェクトのプロパティの順序の変更
- 列挙型の値の追加(例:Webhookイベントオブジェクトの
type
プロパティの値の追加) - データの要素間の空白や改行の有無
これらの非破壊的な機能追加に対しても不具合なく動作するよう、ボットサーバーを実装してください。
# ログ保存の推奨
送信したMessaging APIに対するリクエストや受信したWebhookのログを一定期間保存することを推奨します。これらのログは問題の原因を調査する際に役立ちます。
このセクションで推奨している基本的なログ情報に加えて、以下の情報も役に立ちます。ボットの要件に応じて、以下の情報の保存を検討してください。
- 呼び出したMessaging APIのリクエストボディ
- APIリクエストに対してLINEプラットフォームから返却されたレスポンスボディ
- LINEプラットフォームからWebhookが送信された際のリクエストヘッダーの署名(
x-line-signature
) - LINEプラットフォームから送信されたWebhookイベントオブジェクト
Messaging APIに対するリクエストのログや、LINEプラットフォームからボットサーバーへのWebhook送信時のログ等は、お問い合わせいただいても提供は行っておりません。ログの保存は、開発者自身の責任で行ってください。
# Messaging APIに対するリクエストのログ保存
Messaging APIに対するリクエストを行った際は、以下の情報をログとして保存することを推奨します。
- レスポンスヘッダーのリクエストID(
x-line-request-id
) - APIリクエストを行った時間
- リクエストのHTTPメソッド
- 呼ばれたAPIエンドポイント
- LINEプラットフォームから返されたステータスコード
以下のような形式でログファイルに保存します。
リクエストID(x-line-request-id ) | APIリクエストを行った時間 | HTTPメソッド | APIエンドポイント | ステータスコード |
---|---|---|---|---|
8e36bade-c5d6-4d00-9e69-72244675a9a1 | Mon, 05 Jul 2021 08:14:35 GMT | POST | https://api.line.me/v2/bot/message/push | 200 |
# 受信したWebhookのログ保存
ボットサーバーでLINEプラットフォームからのWebhookを受信した際は、以下の情報をログとして保存することを推奨します。
- Webhook送信元のIPアドレス
- Webhookを受信した時間
- リクエストのHTTPメソッド
- リクエストのパス
- 受信したWebhookに対し、ボットサーバーがレスポンスとして返したステータスコード
以下のような形式でログファイルに保存します。
送信元IPアドレス | Webhookを受信した時間 | HTTPメソッド | リクエストのパス | ステータスコード |
---|---|---|---|---|
203.0.113.1 | Mon, 05 Jul 2021 08:10:00 GMT | POST | /linebot/webhook | 200 |