Messaging APIリファレンス
共通仕様
Webhook
Webhookイベントオブジェクト
OAuth
メッセージ
オーディエンス管理
分析
プロフィール
グループ
トークルーム
リッチメニュー
アカウント連携
メッセージオブジェクト
アクションオブジェクト
リッチメニューの構造

Messaging APIリファレンス

共通仕様

レート制限

Messaging APIでは、エンドポイントごとに以下のレート制限が適用されます。レート制限は、ご利用のプランおよびエンドポイントによって異なります。

note 注意

レート制限を著しく超えて、長時間送信し続けた場合は、リクエストの受け付けを停止することがあります。

LINE公式アカウントに紐づけられたボット

エンドポイント レート制限
マルチキャストメッセージを送る 100,000リクエスト/分
1,700リクエスト/秒(※)
2,000,000受信者/分
ナローキャストメッセージを送る
ブロードキャストメッセージを送る
メッセージの送信数を取得する
友だち数を取得する
友だちの属性情報に基づく統計情報を取得する
60リクエスト/時
上記以外のエンドポイント 100,000リクエスト/分
1,700リクエスト/秒(※)

※秒単位のレート制限は、大量送信時の目安です。

LINE@アカウントに紐づけられたボット

エンドポイント レート制限
マルチキャストメッセージを送る 10,000リクエスト/分
170リクエスト/秒(※)
200,000受信者/分
上記以外のエンドポイント 10,000リクエスト/分
170リクエスト/秒(※)

※秒単位のレート制限は、大量送信時の目安です。

ステータスコード

Messaging APIからは以下のステータスコードが返されます。

ステータスコード 説明
200 OK リクエストが成功しました。
400 Bad Request リクエストに問題があります。
401 Unauthorized 有効なチャネルアクセストークンが指定されていません。
403 Forbidden リソースにアクセスする権限がありません。ご契約中のプランやアカウントに付与されている権限を確認してください。
429 Too Many Requests APIコールのレート制限を超過しました。
500 Internal Server Error 内部サーバーのエラーです。

レスポンスヘッダー

Messaging APIのレスポンスには以下のHTTPヘッダーが含まれます。

レスポンスヘッダー 説明
X-Line-Request-Id リクエストID。各リクエストに発行されるIDです。

エラーレスポンス

エラー発生時は、以下のJSONデータを含むレスポンスボディが返されます。

プロパティ タイプ 説明
message String エラー情報を含むメッセージ。詳しくは、「エラーメッセージ」を参照してください。
details[].message String エラーの詳細。特定の状況では返されません。
details[].property String エラーの発生箇所。特定の状況では返されません。

エラーメッセージ

エラーのJSONレスポンスのmessageプロパティに含まれる、主なエラーメッセージは以下のとおりです。

メッセージ 説明
The request body has X error(s) リクエストボディのJSONデータにエラーがありました。Xの部分にエラーの数が表示されます。詳細はdetails[].messageプロパティとdetails[].propertyプロパティに含まれます。
Invalid reply token 応答メッセージで使用された応答トークンが無効です。
The property, XXX, in the request body is invalid (line: XXX, column: XXX) リクエストボディに無効なプロパティが指定されていました。XXXの部分に具体的な行と列が表示されます。
The request body could not be parsed as JSON (line: XXX, column: XXX) リクエストボディのJSONデータを解析できませんでした。XXXの部分に具体的な行と列が表示されます。
The content type, XXX, is not supported APIでサポートされていないコンテンツタイプがリクエストされました。
Authentication failed due to the following reason: XXX APIが呼び出されたときに認証に失敗しました。XXXの部分に理由が表示されます。
Access to this API is not available for your account 実行権限がないAPIを呼び出しました。
Failed to send messages メッセージの送信に失敗しました。指定したユーザーIDが存在しない場合などにこのエラーが発生します。
You have reached your monthly limit. 追加メッセージ数の上限目安を超過しました。

エラーレスポンスの例

{  
   "message":"The request body has 2 error(s)",
   "details":[  
      {  
         "message":"May not be empty",
         "property":"messages[0].text"
      },
      {  
         "message":"Must be one of the following values: [text, image, video, audio, location, sticker, template, imagemap]",
         "property":"messages[1].type"
      }
   ]
}

Webhook

はじめに

友だち追加やメッセージの送信のようなイベントがトリガーされると、Webhook URLにHTTPS POSTリクエストが送信されます。Webhook URLはチャネルに対してコンソールで設定します。

リクエストはボットサーバーで受信され処理されます。

リクエストヘッダー

リクエストヘッダー 説明
X-Line-Signature 署名の検証に使う署名

リクエストボディ

リクエストボディは、Webhookイベントを受信すべきボットのユーザーIDとWebhookイベントオブジェクトの配列を含むJSONオブジェクトです。

プロパティ タイプ 説明
destination String Webhookイベントを受信すべきボットのユーザーID。ユーザーIDの値は、U[0-9a-f]{32}の正規表現にマッチする文字列です。
events Webhookイベントオブジェクトの配列 イベントの情報

レスポンス

ボットサーバーにWebhookから送信されるHTTP POSTリクエストには、ステータスコード200を返す必要があります。

署名を検証する

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

検証の手順は以下のとおりです。

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

言語ごとの署名検証のコードサンプルについては、言語タブをクリックしてください。

署名検証の例

# Click on the language tabs for examples of signature validation
String channelSecret = ...; // Channel secret string
String httpRequestBody = ...; // Request body string
SecretKeySpec key = new SecretKeySpec(channelSecret.getBytes(), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(key);
byte[] source = httpRequestBody.getBytes("UTF-8");
String signature = Base64.encodeBase64String(mac.doFinal(source));
// Compare X-Line-Signature request header string and the signature
CHANNEL_SECRET = ... # Channel secret string
http_request_body = request.raw_post # Request body string
hash = OpenSSL::HMAC::digest(OpenSSL::Digest::SHA256.new, CHANNEL_SECRET, http_request_body)
signature = Base64.strict_encode64(hash)
# Compare X-Line-Signature request header string and the signature
defer req.Body.Close()
body, err := ioutil.ReadAll(req.Body)
if err != nil {
    // ...
}
decoded, err := base64.StdEncoding.DecodeString(req.Header.Get("X-Line-Signature"))
if err != nil {
    // ...
}
hash := hmac.New(sha256.New, []byte("<channel secret>"))
hash.Write(body)
// Compare decoded signature and `hash.Sum(nil)` by using `hmac.Equal`
$channelSecret = ...; // Channel secret string
$httpRequestBody = ...; // Request body string
$hash = hash_hmac('sha256', $httpRequestBody, $channelSecret, true);
$signature = base64_encode($hash);
// Compare X-Line-Signature request header string and the signature
use Digest::SHA 'hmac_sha256';
use MIME::Base64 'encode_base64';

my $channel_secret= ... # Channel secret string
my $http_body = ... # Request body string
my $signature = encode_base64(hmac_sha256($http_body, $channel_secret));
# Compare X-Line-Signature request header string and the signature
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
const crypto = require('crypto');

const channelSecret = ...; // Channel secret string
const body = ...; // Request body string
const signature = crypto
  .createHmac('SHA256', channelSecret)
  .update(body).digest('base64');
// Compare X-Line-Signature request header and the signature

Webhookイベントオブジェクト

LINEプラットフォームで生成されるイベントを含むJSONオブジェクトです。

これらのイベントオブジェクトのプロパティは、値が存在しない場合があります。値が存在しないプロパティは、生成されるイベントオブジェクトに含まれません。

Messaging APIの機能に追加または変更があったときに、イベントオブジェクトの構造が変更される場合があります。この変更には、プロパティの追加、プロパティの順序の変化、データの要素間の空白や改行の有無が含まれます。将来、従来と異なる構造のイベントオブジェクトを受信しても不具合が発生しないように、サーバーを実装してください。

Webhookイベントオブジェクトの例

{
  "destination": "xxxxxxxxxx", 
  "events": [
    {
      "replyToken": "0f3779fba3b349968c5d07db31eab56f",
      "type": "message",
      "mode": "active",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U4af4980629..."
      },
      "message": {
        "id": "325708",
        "type": "text",
        "text": "Hello, world"
      }
    },
    {
      "replyToken": "8cf9239d56244f4197887e939187e19e",
      "type": "follow",
      "mode": "active",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U4af4980629..."
      }
    }
  ]
}

共通プロパティ

以下のプロパティはすべてのWebhookイベントオブジェクトに含まれます。

プロパティ タイプ 説明
type String イベントのタイプを表す識別子
mode String チャネルの状態。
  • active:チャネルがアクティブです。このWebhookイベントを受信したボットサーバーから、返信メッセージやプッシュメッセージなど送信できます。
  • standby(実装予定):チャネルが待機状態です。このWebhookイベントを受信したボットサーバーは、メッセージの送信を控えてください。
timestamp Number イベントの発生時刻(ミリ秒)
source Object イベントの送信元情報を含むユーザーグループ、またはトークルームオブジェクト
note modeプロパティが変更されるタイミングについて

modeプロパティは、チャネルの管理者が「チャネルの多重化」(実装予定)を行うと、standbyに切り替わります。modeプロパティが自動的にstandbyになることはありません。

現在は、受信チャネルの多重化を行う機能は提供されていません。

送信元ユーザー

プロパティ タイプ 説明
type String user
userId String 送信元ユーザーのID

送信元ユーザーの例

  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  }

送信元グループ

プロパティ タイプ 説明
type String group
groupId String 送信元グループのID
userId String 送信元ユーザーのID。メッセージイベントにのみ含まれます。LINEバージョン7.4.x以前を使用しているユーザーは、userIdに含まれません。詳しくは、「ユーザーの同意」を参照してください。

送信元グループの例

  "source": {
    "type": "group",
    "groupId": "Ca56f94637c...",
    "userId": "U4af4980629..."
  }

送信元トークルーム

プロパティ タイプ 説明
type String room
roomId String 送信元トークルームのID
userId String 送信元ユーザーのID。メッセージイベントにのみ含まれます。LINEバージョン7.4.x以前を使用しているユーザーは、userIdに含まれません。詳しくは、「ユーザーの同意」を参照してください。

送信元トークルームの例

  "source": {
    "type": "room",
    "roomId": "Ra8dbf4673c...",
    "userId": "U4af4980629..."
  }

メッセージイベント

送信されたメッセージを含むWebhookイベントオブジェクトです。 メッセージのタイプに対応するメッセージオブジェクトが、messageプロパティに含まれます。メッセージイベントには応答できます。

プロパティ タイプ 説明
type String message
replyToken String イベントへの応答に使用するトークン
message Object メッセージの内容を含むオブジェクト。メッセージには以下のタイプがあります。

テキスト

送信元から送られたテキストを含むメッセージオブジェクトです。

プロパティ タイプ 説明
id String メッセージID
type String text
text String メッセージのテキスト

テキストメッセージの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  },
  "message": {
    "id": "325708",
    "type": "text",
    "text": "Hello, world!"
  }
}

画像

送信元から送られた画像を含むメッセージオブジェクトです。

プロパティ タイプ 説明
id String メッセージID
type String image
contentProvider.type String 画像ファイルの提供元。
  • line:LINEユーザーが画像ファイルを送信しました。バイナリの画像データはcontentエンドポイントから取得できます。
  • external:LIFFのliff.sendMessages()メソッドで画像ファイルが送信されました。詳しくは、『LIFF APIリファレンス』の「liff.sendMessages()」を参照してください。
contentProvider.originalContentUrl String 画像ファイルのURL。contentProvider.typeがexternalの場合にのみ含まれます。
contentProvider.previewImageUrl String プレビュー画像のURL。contentProvider.typeがexternalの場合にのみ含まれます。

画像メッセージの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  },
  "message": {
    "id": "325708",
    "type": "image",
    "contentProvider": {
      "type": "line"
    }
  }
}

動画

送信元から送られた動画を含むメッセージオブジェクトです。トーク画面に表示されている画像はプレビュー画像で、画像をタップすると動画が表示されます。

プロパティ タイプ 説明
id String メッセージID
type String video
duration Number 動画ファイルの長さ(ミリ秒)
contentProvider.type String 動画ファイルの提供元。
  • line:LINEユーザーが動画ファイルを送信しました。バイナリの動画データはcontentエンドポイントから取得できます。
  • external:LIFFのliff.sendMessages()メソッドで動画ファイルが送信されました。詳しくは、『LIFF APIリファレンス』の「liff.sendMessages()」を参照してください。
contentProvider.originalContentUrl String 動画ファイルのURL。contentProvider.typeがexternalの場合にのみ含まれます。
contentProvider.previewImageUrl String プレビュー画像のURL。contentProvider.typeがexternalの場合にのみ含まれます。

動画メッセージの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  },
  "message": {
    "id": "325708",
    "type": "video",
    "duration": 60000,
    "contentProvider": {
      "type": "external",
      "originalContentUrl": "https://example.com/original.mp4",
      "previewImageUrl": "https://example.com/preview.jpg"
    }
  }
}

音声

送信元から送られた音声を含むメッセージオブジェクトです。

プロパティ タイプ 説明
id String メッセージID
type String audio
duration Number 音声ファイルの長さ(ミリ秒)
contentProvider.type String 音声ファイルの提供元。
  • line:LINEユーザーが音声ファイルを送信しました。バイナリの音声データはcontentエンドポイントから取得できます。
  • external:LIFFのliff.sendMessages()メソッドで音声ファイルが送信されました。詳しくは、『LIFF APIリファレンス』の「liff.sendMessages()」を参照してください。
contentProvider.originalContentUrl String 音声ファイルのURL。contentProvider.typeがexternalの場合にのみ含まれます。

音声メッセージの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  },
  "message": {
    "id": "325708",
    "type": "audio",
    "duration": 60000,
    "contentProvider": {
      "type": "line"
    }
  }
}

ファイル

送信元から送られたファイルを含むメッセージオブジェクトです。バイナリデータはcontentエンドポイントから取得できます。

プロパティ タイプ 説明
id String メッセージID
type String file
fileName String ファイル名
fileSize Number ファイルサイズ(バイト)

ファイルメッセージの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  },
  "message": {
    "id": "325708",
    "type": "file",
    "fileName": "file.txt",
    "fileSize": 2138
  }
}

位置情報

送信元から送られた位置情報データを含むメッセージオブジェクトです。

プロパティ タイプ 説明
id String メッセージID
type String location
title String タイトル
address String 住所
latitude Decimal 緯度
longitude Decimal 経度

位置情報メッセージの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  },
  "message": {
    "id": "325708",
    "type": "location",
    "title": "my location",
    "address": "〒150-0002 東京都渋谷区渋谷2丁目21−1",
    "latitude": 35.65910807942215,
    "longitude": 139.70372892916203
  }
}

スタンプ

送信元から送られたスタンプデータを含むメッセージオブジェクトです。 LINEの基本的なスタンプとスタンプIDについては、スタンプリストを参照してください。

プロパティ タイプ 説明
id String メッセージID
type String sticker
packageId String パッケージID
stickerId String スタンプID
stickerResourceType String スタンプのリソースタイプ。以下のいずれかの値です。
  • STATIC:静止画スタンプ
  • ANIMATION:アニメーションスタンプ
  • SOUND:サウンドスタンプ
  • ANIMATION_SOUND:アニメーション+サウンドスタンプ
  • POPUP:ポップアップスタンプ
  • POPUP_SOUND:ポップアップ+サウンドスタンプ
  • NAME_TEXT:カスタムスタンプ
note スタンプのリソースタイプについて

今後、新しいリソースタイプが予告なく追加される可能性があります。将来、従来と異なるリソースタイプを受信しても不具合が発生しないように、サーバーを実装してください。

スタンプメッセージの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  },
  "message": {
    "id": "325708",
    "type": "sticker",
    "packageId": "1",
    "stickerId": "1",
    "stickerResourceType": "STATIC"
  }
}

フォローイベント

LINE公式アカウントが友だち追加またはブロック解除されたことを示すイベントです。フォローイベントには応答できます。

プロパティ タイプ 説明
type String follow
replyToken String このイベントへの応答に使用するトークン

フォローイベントの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "follow",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  }
}

フォロー解除イベント

LINE公式アカウントがブロックされたことを示すイベントです。

プロパティ タイプ 説明
type String unfollow

フォロー解除イベントの例

{
  "type": "unfollow",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  }
}

参加イベント

LINE公式アカウントがグループまたはトークルームに参加したことを示すイベントです。参加イベントには応答できます。

参加イベントが送信されるタイミングはグループとトークルームで異なります。

  • グループの場合:ユーザーがLINE公式アカウントを招待したときに送信されます。
  • トークルームの場合:LINE公式アカウントがトークルームに追加された後で、最初に何らかのイベントが発生したときに送信されます。例えば、ユーザーがメッセージを送ったり、ユーザーがトークルームに追加されたりしたときです。
プロパティ タイプ 説明
type String join
replyToken String このイベントへの応答に使用するトークン

参加イベントの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "join",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "group",
    "groupId": "C4af4980629..."
  }
}

退出イベント

ユーザーがグループからLINE公式アカウントを削除したか、LINE公式アカウントがグループまたはトークルームから退出したことを示すイベントです。

プロパティ タイプ 説明
type String leave

退出イベントの例

{
  "type": "leave",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "group",
    "groupId": "C4af4980629..."
  }
}

メンバー参加イベント

LINE公式アカウントがメンバーになっているグループまたはトークルームにユーザーが参加したことを示すイベントです。

プロパティ タイプ 説明
type String memberJoined
joined.members 送信元ユーザーオブジェクトの配列 参加したユーザーのID
replyToken String このイベントへの応答に使用するトークン

メンバー参加イベントの例

{
  "replyToken": "0f3779fba3b349968c5d07db31eabf65",
  "type": "memberJoined",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "group",
    "groupId": "C4af4980629..."
  },
  "joined": {
    "members": [
      {
       "type": "user",
        "userId": "U4af4980629..."
      },
      {
        "type": "user",
        "userId": "U91eeaf62d9..."
      }
    ]
  }
}

メンバー退出イベント

LINE公式アカウントがメンバーになっているグループまたはトークルームからユーザーが退出したことを示すイベントです。

プロパティ タイプ 説明
type String memberLeft
left.members 送信元ユーザーオブジェクトの配列 退出したユーザーのID

メンバー退出イベントの例

{
  "type": "memberLeft",
  "mode": "active",
  "timestamp": 1462629479960,
  "source": {
    "type": "group",
    "groupId": "C4af4980629..."
  },
  "left": {
    "members": [
      {
        "type": "user",
        "userId": "U4af4980629..."
      },
      {  
        "type": "user",
        "userId": "U91eeaf62d9..."
      }
    ]
  }
}

ポストバックイベント

ユーザーが、ポストバックアクションを実行したことを示すイベントオブジェクトです。ポストバックイベントには応答できます。

プロパティ タイプ 説明
type String postback
replyToken String このイベントへの応答に使用するトークン
postback.data String ポストバックデータ
postback.params Object 日時選択アクションを介してユーザーが選択した日時を含むJSONオブジェクト。
日時選択アクションによるポストバックアクションの場合にのみ返されます。

ポストバックイベントの例

{  
   "type":"postback",
   "replyToken":"b60d432864f44d079f6d8efe86cf404b",
   "source":{  
      "userId":"U91eeaf62d...",
      "type":"user"
   },
   "mode": "active",
   "timestamp":1513669370317,
   "postback":{  
      "data":"storeId=12345",
      "params":{  
         "datetime":"2017-12-25T01:00"
      }
   }
}

postback.paramsオブジェクト

日時選択アクションを介してユーザーが選択した日時を含むオブジェクトです。full-datetime-hour、およびtime-minuteの形式は、RFC3339プロトコルで定義されています。

プロパティ 形式 説明
date full-date ユーザーが選択した日付。dateモードの場合にのみ含まれます。
time time-hour ":" time-minute ユーザーが選択した時刻。timeモードの場合にのみ含まれます。
datetime full-date "T" time-hour ":" time-minute ユーザーが選択した日付と時刻。datetimeモードの場合にのみ含まれます。

postback.paramsオブジェクトの例

{  
   "datetime":"2017-12-25T01:00"
}

ビーコンイベント

ビーコンの電波の受信圏にユーザーが入ったことを示すイベントオブジェクトです。ビーコンイベントには応答できます。

プロパティ タイプ 説明
type String beacon
replyToken String このイベントへの応答に使用するトークン
beacon.hwid String 検出されたビーコンのハードウェアID
beacon.type String ビーコンイベントのタイプ。「ビーコンイベントのタイプ」を参照してください。
beacon.dm String 検出されたビーコンのデバイスメッセージ。このメッセージは、ボットサーバーへの通知を目的としてビーコンにより生成されるデータです。Device messageプロパティをサポートするデバイスからのWebhookイベントにのみ含まれます。
詳しくは、LINE Simple Beaconの仕様を参照してください。

ビーコンイベントのタイプ

beacon.type 説明
enter ユーザーがビーコンの電波の受信圏に入りました。
leave 【廃止予定】ユーザーがビーコンの受信圏から出ました。
banner ユーザーがビーコンバナーをタップしました。
stay ユーザーがビーコンの電波の受信圏に滞在しています。
このイベントは、最短10秒間隔で繰り返し送信されます。

ビーコンバナーおよびstayイベントの利用をご希望の場合は、LINE for Businessウェブサイトからお問い合わせください。

ビーコンイベントの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "beacon",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  },
  "beacon": {
    "hwid": "d41d8cd98f",
    "type": "enter"
  }
}

ユーザーがLINEアカウントとプロバイダーが提供するサービスのアカウントを連携したことを示すイベントオブジェクトです。アカウント連携イベントには応答できます。

連携トークンの期限が切れている、または使用済みの場合は、Webhookイベント自体が送信されず、ユーザーにエラーが表示されます。

プロパティ タイプ 説明
type String accountLink
replyToken String このイベントへの応答に使用するトークン。連携に失敗した場合はこの値は含まれません。
link Object linkオブジェクト。アカウント連携が成功したかどうかと、プロバイダーのサービスのユーザーIDから生成したノンスが含まれます。

アカウント連携イベントの例

{
  "type": "accountLink",
  "mode": "active",
  "replyToken": "b60d432864f44d079f6d8efe86cf404b",
  "source": {
    "userId": "U91eeaf62d...",
    "type": "user"
  },
  "timestamp": 1513669370317,
  "link": {
    "result": "ok",
    "nonce": "xxxxxxxxxxxxxxx"
  }
}
プロパティ タイプ 説明
result String 連携が成功したかどうかを示す値。以下のどちらかになります。
  • ok:連携が成功したことを示します。
  • failed:ユーザーのすり替えなどが原因で、連携が失敗したことを示します。
nonce String ユーザーIDの検証時に指定したノンス

linkオブジェクトの例

"link": {
  "result": "ok",
  "nonce": "xxxxxxxxxxxxxxx"
}

ユーザーの操作により、デバイスとLINEが連携されたことを示すイベントです。

プロパティ タイプ 説明
type String things
replyToken String このイベントへの応答に使用するトークン
things.deviceId String LINEと連携されたデバイスのデバイスIDです。
things.type String link

LINE Things用のREST APIを使うと、Webhookイベントで取得したデバイスIDから、ユーザーが連携または連携解除したデバイスを特定できます。APIについて詳しくは、『LINE Things APIリファレンス』の「デバイスIDを指定して、プロダクトIDとPSDIを取得する」を参照してください。

デバイス連携イベントの例

{
  "type": "things",
  "mode": "active",
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U91eeaf62d..."
  },
  "things": {
    "deviceId": "t2c449c9d1...",
    "type": "link"
  }
}
events = client.parse_events_from(body)
events.each do |event|
  case event.type
  when Line::Bot::Event::ThingsType::Link
    puts "[THINGS] device_id: #{event.device_id} type: #{event.type}"
  end
end

ユーザーの操作により、デバイスとLINEの連携が解除されたことを示すイベントです。

プロパティ タイプ 説明
type String things
replyToken String このイベントへの応答に使用するトークン
things.deviceId String LINEと連携解除されたデバイスのデバイスIDです。
things.type String unlink

LINE Things用のREST APIを使うと、Webhookイベントで取得したデバイスIDから、ユーザーが連携または連携解除したデバイスを特定できます。APIについて詳しくは、『LINE Things APIリファレンス』の「デバイスIDを指定して、プロダクトIDとPSDIを取得する」を参照してください。

デバイス連携解除イベントの例

{
  "type": "things",
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "mode": "active",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U91eeaf62d..."
  },
  "things": {
    "deviceId": "t2c449c9d1...",
    "type": "unlink"
  }
}
events = client.parse_events_from(body)
events.each do |event|
  case event.type
  when Line::Bot::Event::ThingsType::Unlink
    puts "[THINGS] device_id: #{event.device_id} type: #{event.type}"
  end
end

LINE Thingsシナリオ実行イベント

自動通信のシナリオが実行されたことを示すイベントです。

シナリオセットごとにまとめて実行結果が返されるのではなく、シナリオごとに実行結果が返されます。

注:実行結果が返される順序は、シナリオの順序とは無関係です。

プロパティ タイプ 説明
type String things
replyToken String このイベントへの応答に使用するトークン
things.deviceId String シナリオを実行したデバイスのデバイスID
things.type String scenarioResult
things.result.scenarioId String 実行されたシナリオID
things.result.revision Number 実行したシナリオを含むシナリオセットのリビジョン
things.result.startTime Number シナリオのアクションの実行が開始された時刻(ミリ秒。LINEアプリの時刻)
things.result.endTime Number シナリオの実行が完了した時刻(ミリ秒。LINEアプリの時刻)
things.result.resultCode String シナリオの実行完了ステータス
詳しくは、「things.result.resultCodeの定義」を参照してください。
things.result.actionResults Array アクション (Action)」に含まれる、個々のアクションコマンドの実行結果
なお、シナリオに記述した「アクション (Action)」については、以下の性質があります
  • シナリオに記述したアクションコマンドは、先頭から順にひとつずつ実行されます。
  • 個々のアクションコマンドは、実行されると、何らかの結果が生成されます。
    SLEEPのようにデータを生成しないアクションの場合も、void型の実行結果が返されます。
  • リストの要素数が0の場合もあります。
したがって、things.result.actionResultsは以下のような性質をもちます
  • リストの要素数と、シナリオで定義されたアクション数は同じです。
  • シナリオ内で、実行されたアクションの順に、実行結果が格納されます。つまり、GATT_READを3回実行するシナリオの場合、GATT_READした順にデータが格納されます。
  • リストの要素数が0の場合は、things.result.actionResultsの要素数が0になります。
things.result.actionResults[].type String voidbinary
  • 実行されたアクションのtypeに依存します。
  • things.result.actionResultsが空でない場合は必ず含まれます。
things.result.actionResults[].data String Base64形式でエンコードされたバイナリデータ
things.result.actionResults[].typebinaryの場合は、必ず含まれます。
things.result.bleNotificationPayload String Notificationで受け取ったデータ
Base64形式でエンコードされたバイナリデータです。なお、trigger.type = BLE_NOTIFICATIONのシナリオの場合のみ、必ず含まれます。
things.result.errorReason String エラー理由

things.result.resultCodeの定義

resultCode 説明
success 実行が正常に完了したことを示す
gatt_error GATTオペレーションの実行が失敗したことを示す
  • GATT Service UUIDが間違っている
  • GATT Characteristic UUIDが間違っている
  • 書き込めないCharacteristicに書き込もうとした
runtime_error 予想外のエラーが発生したことを示す
  • そのほか、予期しないエラーが発生した場合

LINE Thingsシナリオ実行イベントの例

{
  "events": [
    {
      "type": "things",
      "replyToken": "0f3779fba3b349968c5d07db31eab56f",
      "source": {
        "userId": "uXXX",
        "type": "user"
      },
      "mode": "active",
      "timestamp": 1547817848122,
      "things": {
        "type": "scenarioResult",
        "deviceId": "tXXX",
        "result": {
          "scenarioId": "XXX",
          "revision": 2,
          "startTime": 1547817845950,
          "endTime": 1547817845952,
          "resultCode": "success",
          "bleNotificationPayload": "AQ==",
          "actionResults": [
            {
              "type": "binary",
              "data": "/w=="
            }
          ]
        }
      }
    }
  ],
  "destination": "uXXX"
}

OAuth

チャネルアクセストークンを発行する

note 注意

この方法では、30日間有効な短期のチャネルアクセストークンが発行されます。長期のチャネルアクセストークンを発行するには、コンソールにある[再発行]ボタンを使います。

短期のチャネルアクセストークンを発行するAPIです。

最大で30件のトークンを発行できます。上限を超過した場合は、発行順に既存のチャネルアクセストークンが取り消されます。

HTTPリクエスト

リクエストヘッダー

リクエストヘッダー 説明
Content-Type application/x-www-form-urlencoded

リクエストボディ

フィールド タイプ 必須 説明
grant_type String 必須 client_credentials
client_id String 必須 チャネルID。コンソールで確認できます。
client_secret String 必須 チャネルシークレット。コンソールで確認できます。

リクエストの例

curl -v -X POST https://api.line.me/v2/oauth/accessToken \
-H "Content-Type:application/x-www-form-urlencoded" \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id={channel ID}' \
--data-urlencode 'client_secret={channel secret}'
// No sample code available
# No sample code available
// No sample code available
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->createChannelAccessToken('<channel id>');
# No sample code available
# No sample code available
// No sample code available

レスポンス

HTTPステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
access_token String 短期のチャネルアクセストークン。有効期間は30日です。
注:チャネルアクセストークンは更新できません。
expires_in Number チャネルアクセストークンが発行されてから有効期限が切れるまでの秒数
token_type String Bearer

レスポンスの例

{
"access_token":"W1TeHCgfH2Liwa.....",
"expires_in":2592000,
"token_type":"Bearer"
}

エラーレスポンス

HTTPステータスコード400と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
error String エラーの概要
error_description String エラーの内容。特定の状況では返されません。

エラーレスポンスの例

{
"error":"invalid_request",
"error_description":"some parameters missed or invalid"
}

チャネルアクセストークンを取り消す

チャネルアクセストークンを取り消すAPIです。

HTTPリクエスト

リクエストヘッダー

リクエストヘッダー 説明
Content-Type application/x-www-form-urlencoded

リクエストボディ

フィールド タイプ 必須 説明
access_token String 必須 チャネルアクセストークン

レスポンス

ステータスコード200と空のレスポンスボディを返します。無効なチャネルアクセストークンを指定した場合はエラーが返りません。

リクエストの例

curl -v -X POST https://api.line.me/v2/oauth/revoke \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode 'access_token={channel access token}'
// No sample code available
# No sample code available
// No sample code available
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->revokeChannelAccessToken('<channel access token>');
# No sample code available
# No sample code available
// No sample code available

エラーレスポンス

HTTPステータスコード400と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
error String エラーの概要
error_description String エラーの内容。特定の状況では返されません。

エラーレスポンスの例

{
"error":"invalid_request",
"error_description":"some parameters missed or invalid"
}

メッセージ

応答メッセージを送る

ユーザー、グループ、またはトークルームからのイベントに対して応答メッセージを送信するAPIです。

応答メッセージを送るには、Webhookイベントオブジェクトに含まれる応答トークンが必要です。

イベントが発生するとWebhookを使って通知されます。応答できるイベントには応答トークンが発行されます。

応答トークンは一定の期間が経過すると無効になるため、メッセージを受信したらすぐに応答を返す必要があります。応答トークンは1回のみ使用できます。

HTTPリクエスト

POST https://api.line.me/v2/bot/message/reply

リクエストヘッダー

リクエストヘッダー 説明
Content-Type application/json
Authorization Bearer {channel access token}

リクエストボディ

プロパティ タイプ 必須 説明
replyToken String 必須 Webhookで受信する応答トークン
messages メッセージオブジェクトの配列 必須 送信するメッセージ
最大件数:5
notificationDisabled Boolean 任意
  • true:メッセージ送信時に、ユーザーに通知されない。
  • false:メッセージ送信時に、ユーザーに通知される。ただし、LINEで通知をオフにしている場合は通知されません。
デフォルト値はfalseです。

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/message/reply \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
    "replyToken":"nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
    "messages":[
        {
            "type":"text",
            "text":"Hello, user"
        },
        {
            "type":"text",
            "text":"May I help you?"
        }
    ]
}'
final LineMessagingClient client = LineMessagingClient
        .builder("<channel access token>")
        .build();

final TextMessage textMessage = new TextMessage("hello");
final ReplyMessage replyMessage = new ReplyMessage(
        "<replyToken>",
        textMessage);

final BotApiResponse botApiResponse;
try {
    botApiResponse = client.replyMessage(replyMessage).get();
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
    return;
}

System.out.println(botApiResponse);
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
if _, err := bot.ReplyMessage(<replyToken>, linebot.NewTextMessage("hello")).Do(); err != nil {
    ...
}
message = {
  type: 'text',
  text: 'hello'
}
client = Line::Bot::Client.new { |config|
    config.channel_secret = "<channel secret>"
    config.channel_token = "<channel access token>"
}
response = client.reply_message("<replyToken>", message)
p response
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);

$textMessageBuilder = new \LINE\LINEBot\MessageBuilder\TextMessageBuilder('hello');
$response = $bot->replyMessage('<replyToken>', $textMessageBuilder);

echo $response->getHTTPStatus() . ' ' . $response->getRawBody();
use LINE::Bot::API;
use LINE::Bot::API::Builder::SendMessage;

my $bot = LINE::Bot::API->new(
    channel_secret       => "<channel secret>",
    channel_access_token => "<channel access token>",
);

my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_text(
    text => 'hello',
);
my $res = $bot->reply_message("<replyToken>", $messages->build);
unless ($res->is_success) {
    # error handling
    ....
}
from linebot import LineBotApi
from linebot.models import TextSendMessage
from linebot.exceptions import LineBotApiError

line_bot_api = LineBotApi('<channel access token>')

try:
    line_bot_api.reply_message('<reply_token>', TextSendMessage(text='Hello World!'))
except LineBotApiError as e:
    # error handle
    ...
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

const message = {
  type: 'text',
  text: 'Hello World!'
};

client.replyMessage('<replyToken>', message)
  .then(() => {
    ...
  })
  .catch((err) => {
    // error handling
  });

レスポンス

ステータスコード200と空のJSONオブジェクトを返します。

レスポンスの例

{}

プッシュメッセージを送る

ユーザー、グループ、またはトークルームに、任意のタイミングでプッシュメッセージを送信するAPIです。

注:フリープランまたはベーシックプランのLINE@アカウントでは使用できません。

HTTPリクエスト

POST https://api.line.me/v2/bot/message/push

リクエストヘッダー

リクエストヘッダー 説明
Content-Type application/json
Authorization Bearer {channel access token}

リクエストボディ

プロパティ タイプ 必須 説明
to String 必須 送信先のID。Webhookイベントオブジェクトで返される、userIdgroupId、またはroomIdの値を使用します。LINEに表示されるLINE IDは使用しないでください。
messages メッセージオブジェクトの配列 必須 送信するメッセージ
最大件数:5
notificationDisabled Boolean 任意
  • true:メッセージ送信時に、ユーザーに通知されない。
  • false:メッセージ送信時に、ユーザーに通知される。ただし、LINEで通知をオフにしている場合は通知されません。
デフォルト値はfalseです。

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
    "to": "U4af4980629...",
    "messages":[
        {
            "type":"text",
            "text":"Hello, world1"
        },
        {
            "type":"text",
            "text":"Hello, world2"
        }
    ]
}'
final LineMessagingClient client = LineMessagingClient
        .builder("<channel access token>")
        .build();

final TextMessage textMessage = new TextMessage("hello");
final PushMessage pushMessage = new PushMessage(
        "<to>",
        textMessage);

final BotApiResponse botApiResponse;
try {
    botApiResponse = client.pushMessage(pushMessage).get();
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
    return;
}

System.out.println(botApiResponse);
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
if _, err := bot.PushMessage(<to>, linebot.NewTextMessage("hello")).Do(); err != nil {
    ...
}
message = {
  type: 'text',
  text: 'hello'
}
client = Line::Bot::Client.new { |config|
    config.channel_secret = "<channel secret>"
    config.channel_token = "<channel access token>"
}
response = client.push_message("<to>", message)
p response
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);

$textMessageBuilder = new \LINE\LINEBot\MessageBuilder\TextMessageBuilder('hello');
$response = $bot->pushMessage('<to>', $textMessageBuilder);

echo $response->getHTTPStatus() . ' ' . $response->getRawBody();
use LINE::Bot::API;
use LINE::Bot::API::Builder::SendMessage;

my $bot = LINE::Bot::API->new(
    channel_secret       => "<channel secret>",
    channel_access_token => "<channel access token>",
);

my $messages = LINE::Bot::API::Builder::SendMessage->new(
)->add_text(
    text => 'hello',
);
my $res = $bot->push_message("<to>", $messages->build);
unless ($res->is_success) {
    # error handling
    ....
}
from linebot import LineBotApi
from linebot.models import TextSendMessage
from linebot.exceptions import LineBotApiError

line_bot_api = LineBotApi('<channel access token>')

try:
    line_bot_api.push_message('<to>', TextSendMessage(text='Hello World!'))
except LineBotApiError as e:
    # error handle
    ...
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

const message = {
  type: 'text',
  text: 'Hello World!'
};

client.pushMessage('<to>', message)
  .then(() => {
    ...
  })
  .catch((err) => {
    // error handling
  });

レスポンス

ステータスコード200と空のJSONオブジェクトを返します。

レスポンスの例

{}

マルチキャストメッセージを送る

複数のユーザーに、任意のタイミングでプッシュメッセージを送信するAPIです。グループまたはトークルームにメッセージを送ることはできません。

注:フリープランまたはベーシックプランのLINE@アカウントでは使用できません。

HTTPリクエスト

POST https://api.line.me/v2/bot/message/multicast

リクエストヘッダー

リクエストヘッダー 説明
Content-Type application/json
Authorization Bearer {channel access token}

リクエストボディ

プロパティ タイプ 必須 説明
to 文字列の配列 必須 ユーザーIDの配列。Webhookイベントオブジェクトで返されるuserIdの値を使用します。LINEに表示されるLINE IDは使用しないでください。
最大ユーザーID数:150
messages メッセージオブジェクトの配列 必須 送信するメッセージ
最大件数:5
notificationDisabled Boolean 任意
  • true:メッセージ送信時に、ユーザーに通知されない。
  • false:メッセージ送信時に、ユーザーに通知される。ただし、LINEで通知をオフにしている場合は通知されません。
デフォルト値はfalseです。

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/message/multicast \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
    "to": ["U4af4980629...","U0c229f96c4..."],
    "messages":[
        {
            "type":"text",
            "text":"Hello, world1"
        },
        {
            "type":"text",
            "text":"Hello, world2"
        }
    ]
}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
user_ids = [user_id1, user_id2, ...]
client.multicast(user_ids, <message>)
userIDs := []string{ ... }
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
if _, err := bot.Multicast(userIDs, linebot.NewTextMessage("hello")).Do(); err != nil {
    ...
}
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$userIds = ['<userId1>', '<userId2>', ...];
$bot->multicast($userIds, '<message>');
# No sample code available
line_bot_api.multicast(['<user_id_1>', '<user_id_2>'], TextSendMessage(text='Hello World!'))
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

const message1 = {
  type: 'text',
  text: 'Hello,'
};

const message2 = {
  type: 'text',
  text: 'World!'
};

client.multicast(['user_id_1', 'user_id_2', 'room_id_1'], 
  [message1, message2]
)

レスポンス

ステータスコード200と空のJSONオブジェクトを返します。

レスポンスの例

{}

ナローキャストメッセージを送る

複数のユーザーに、任意のタイミングでプッシュメッセージを送信します。送信対象は、属性情報(性別や年齢、OSの種類、地域など)やリターゲティング(オーディエンス)を利用して指定できます。グループまたはトークルームにメッセージを送ることはできません。

note 注意

サービス統合前のLINE公式アカウントおよびLINE@アカウントでは、このAPIは使用できません。サービス統合後のLINE公式アカウントに移行してください。詳しくは、「LINE@アカウントの移行」を参照してください。

HTTPリクエスト

POST https://api.line.me/v2/bot/message/narrowcast

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}
Content-Type application/json

リクエストボディ

プロパティ タイプ 必須 説明
messages メッセージオブジェクトの配列 必須 送信するメッセージ
最大件数:5
recipient Object 任意 レシピエントオブジェクト。オーディエンスを使用して、送信対象を指定します。
省略すると、LINE公式アカウントを友だち追加したすべてのユーザーが送信対象になります。
filter.demographic Object 任意 デモグラフィックフィルターオブジェクト。友だちの属性情報を使用して、送信対象をフィルタリングできます。
省略すると、属性が「不明」になっているユーザーを含めた全員に配信されます。
limit.max Number 任意 ナローキャストメッセージの最大送信数。このナローキャストメッセージによる送信数を制限する場合に指定します。なお、選択される送信対象は、無作為に抽出されます。
note 最低送信対象数について

送信対象のユーザーの属性を推測できないようにするために、送信対象が「最低送信対象数」よりも少ない場合はナローキャストメッセージは送信できません。「最低送信対象数」は、LINEプラットフォームで定義されており、数値は非公開です。

note 配信可能なメッセージの上限数について

ナローキャストメッセージを送信するときは、recipientプロパティおよびfilter.demographicプロパティの設定にかかわらず、一時的にすべての友だちにメッセージを配信する前提で、配信予定メッセージ数が計算されます。配信予定メッセージ数が、当月分の上限目安を超えた場合は、ナローキャストメッセージを送信できません。

ただし、limit.maxプロパティで設定した最大送信数が、当月分の上限目安を超えなければ、ナローキャストメッセージを送信できます。

note 属性情報の利用について
  • 属性情報は3日前の属性情報を元に絞込みます。
  • 属性を指定しない場合は、属性が「不明」になっているユーザーを含めた全員に配信されます。

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/message/narrowcast \
-H 'Authorization: Bearer {channel access token}' \
-H 'Content-Type: application/json' \
-d '{
    "messages": [
        {
            "type": "text",
            "text": "test message"
        }
    ],
    "recipient": {
        "type": "operator",
        "and": [
            {
                "type": "audience",
                "audienceGroupId": 5614991017776
            },
            {
                "type": "operator",
                "not": {
                    "type": "audience",
                    "requestId": "4389303728991"
                }
            }
        ]
    },
    "filter": {
        "demographic": {
            "type": "operator",
            "or": [
                {
                    "type": "operator",
                    "and": [
                        {
                            "type": "gender",
                            "oneOf": [
                                "male",
                                "female"
                            ]
                        },
                        {
                            "type": "age",
                            "gte": "age_20",
                            "lt": "age_25"
                        },
                        {
                            "type": "appType",
                            "oneOf": [
                                "android",
                                "ios"
                            ]
                        },
                        {
                            "type": "area",
                            "oneOf": [
                                "jp_23",
                                "jp_05"
                            ]
                        },
                        {
                            "type": "subscriptionPeriod",
                            "gte": "day_7",
                            "lt": "day_30"
                        }
                    ]
                },
                {
                    "type": "operator",
                    "and": [
                        {
                            "type": "age",
                            "gte": "age_35",
                            "lt": "age_40"
                        },
                        {
                            "type": "operator",
                            "not": {
                                "type": "gender",
                                "oneOf": [
                                    "male"
                                ]
                            }
                        }
                    ]
                }
            ]
        }
    },
    "limit": {
        "max": 100
    }
}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available
レシピエントオブジェクト

レシピエントオブジェクトは、オーディエンスを表すオブジェクトです。演算子オブジェクトを利用すると、条件を組み合わせて、送信対象を指定できます。

  • オーディエンスオブジェクト

    プロパティ タイプ 必須 説明
    type String 必須 audience
    audienceGroupId Number 必須 オーディエンスID。オーディエンスを作成するには、「オーディエンス管理」のAPIを使用します。
  • 演算子オブジェクト

    積集合(AND)、和集合(OR)、差集合(NOT)を使用して、複数のレシピエントオブジェクトから、新たなレシピエントオブジェクトを作成できます。1回のリクエストごとに、レシピエントオブジェクトは、合計10件まで指定できます。

    プロパティ タイプ 必須 説明
    type String 必須 operator
    and レシピエントオブジェクトの配列 配列で指定したレシピエントオブジェクトの積集合(AND)を、新たなレシピエントオブジェクトとする
    or レシピエントオブジェクトの配列 配列で指定したレシピエントオブジェクトの和集合(OR)を、新たなレシピエントオブジェクトとする
    not レシピエントオブジェクトの配列 配列で指定したレシピエントオブジェクトを配信対象外にした、新たなレシピエントオブジェクトとする

    andプロパティ、orプロパティ、notプロパティのいずれか1つだけ、必ず指定してください。また、空配列は指定できません。

オーディエンスを表すレシピエントオブジェクトの例

{
    "type": "operator",
    "and": [
        {
            "type": "audience",
            "audienceGroupId": 5614991017776
        },
        {
            "type": "operator",
            "not": {
                "type": "audience",
                "audienceGroupId": 4389303728991
            }
        }
    ]
}
デモグラフィックフィルターオブジェクト

デモグラフィックフィルターオブジェクトは、送信対象をフィルタリングする条件(性別、年齢、OSの種類、地域、友だち期間)を表すオブジェクトです。演算子オブジェクトを利用すると、条件を組み合わせて、送信対象をフィルタリングできます。

  • 性別

    プロパティ タイプ 必須 説明
    type String 必須 gender
    oneOf String 必須 指定した性別を送信対象とします。以下のいずれかの値を指定します。
    • male:男性
    • female:女性
  • 年齢

    年齢の範囲を指定してフィルタリングします。

    プロパティ タイプ 必須 説明
    type String 必須 age
    gte String 指定した年齢以上を送信対象とします。以下のいずれかの値を指定します。
    • age_15
    • age_20
    • age_25
    • age_30
    • age_35
    • age_40
    • age_45
    • age_50
    lt String 指定した年齢未満を送信対象とします。gteプロパティと同じ値を指定できます。

    gteプロパティまたはltプロパティの両方またはいずれか一方を、必ず指定してください。

  • OSの種類

    プロパティ タイプ 必須 説明
    type String 必須 appType
    oneOf String 必須 指定したOSを送信対象とします。以下のいずれかの値を指定します。
    • ios
    • android
  • 地域

    プロパティ タイプ 必須 説明
    type String 必須 appType
    oneOf String 必須 指定した地域を送信対象とします。以下のいずれかの値を指定します。
    日本 // JP (country code=392)
    • jp_01:北海道 // Hokkaido
    • jp_02:青森県 // Aomori
    • jp_03:岩手県 // Iwate
    • jp_04:宮城県 // Miyagi
    • jp_05:秋田県 // Akita
    • jp_06:山形県 // Yamagata
    • jp_07:福島県 // Fukushima
    • jp_08:茨城県 // Ibaraki
    • jp_09:栃木県 // Tochigi
    • jp_10:群馬県 // Gunma
    • jp_11:埼玉県 // Saitama
    • jp_12:千葉県 // Chiba
    • jp_13:東京都 // Tokyo
    • jp_14:神奈川県 // Kanagawa
    • jp_15:新潟県 // Niigata
    • jp_16:富山県 // Toyama
    • jp_17:石川県 // Ishikawa
    • jp_18:福井県 // Fukui
    • jp_19:山梨県 // Yamanashi
    • jp_20:長野県 // Nagano
    • jp_21:岐阜県 // Gifu
    • jp_22:静岡県 // Shizuoka
    • jp_23:愛知県 // Aichi
    • jp_24:三重県 // Mie
    • jp_25:滋賀県 // Shiga
    • jp_26:京都府 // Kyoto
    • jp_27:大阪府 // Osaka
    • jp_28:兵庫県 // Hyougo
    • jp_29:奈良県 // Nara
    • jp_30:和歌山県 // Wakayama
    • jp_31:鳥取県 // Tottori
    • jp_32:島根県 // Shimane
    • jp_33:岡山県 // Okayama
    • jp_34:広島県 // Hiroshima
    • jp_35:山口県 // Yamaguchi
    • jp_36:徳島県 // Tokushima
    • jp_37:香川県 // Kagawa
    • jp_38:愛媛県 // Ehime
    • jp_39:高知県 // Kouchi
    • jp_40:福岡県 // Fukuoka
    • jp_41:佐賀県 // Saga
    • jp_42:長崎県 // Nagasaki
    • jp_43:熊本県 // Kumamoto
    • jp_44:大分県 // Oita
    • jp_45:宮崎県 // Miyazaki
    • jp_46:鹿児島県 // Kagoshima
    • jp_47:沖縄県 // Okinawa
    台湾 // TW (country code=158)
    • tw_01:台北市 // Taipei City
    • tw_02:新北市 // New Taipei City
    • tw_03:桃園市 // Taoyuan City
    • tw_04:台中市 // Taichung City
    • tw_05:台南市 // Tainan City
    • tw_06:高雄市 // Kaohsiung City
    • tw_07:基隆市 // Keelung City
    • tw_08:新竹市 // Hsinchu City
    • tw_09:嘉義市 // Chiayi City
    • tw_10:新竹県 // Hsinchu County
    • tw_11:苗栗県 // Miaoli County
    • tw_12:彰化県 // Changhua County
    • tw_13:南投県 // Nantou County
    • tw_14:雲林県 // Yunlin County
    • tw_15:嘉義県 // Chiayi County
    • tw_16:屏東県 // Pingtung County
    • tw_17:宜蘭県 // Yilan County
    • tw_18:花蓮県 // Hualien County
    • tw_19:台東県 // Taitung County
    • tw_20:澎湖県 // Penghu County
    • tw_21:金門県 // Kinmen County
    • tw_22:連江県 // Lienchiang County
    タイ // TH (country code=764)
    • th_01:バンコク // Bangkok
    • th_02:パタヤ // Pattaya
    • th_03:北部 // Northern
    • th_04:中央部 // Central
    • th_05:南部 // Southern
    • th_06:東部 // Eastern
    • th_07:東北部 // NorthEastern
    • th_08:西部 // Western
    インドネシア // ID (country code=360)
    • id_01:バリ // Bali
    • id_02:バンドン // Bandung
    • id_03:バンジャルマシン // Banjarmasin
    • id_04:ジャボデタベック(ジャカルタ首都圏) // Jabodetabek
    • id_06:マカッサル // Makassar
    • id_07:メダン // Medan
    • id_08:パレンバン // Palembang
    • id_09:サマリンダ // Samarinda
    • id_10:スマラン // Semarang
    • id_11:スラバヤ // Surabaya
    • id_12:ジョグジャカルタ // Yogyakarta
    • id_05:その他のエリア // Lainnya
  • 友だち期間

    友だち期間の範囲を指定してフィルタリングします。

    プロパティ タイプ 必須 説明
    type String 必須 subscriptionPeriod
    gte String 指定した日数以上を送信対象とします。以下のいずれかの値を指定します。
    • day_7
    • day_30
    • day_90
    • day_180
    • day_365
    lt String 指定した日数未満を送信対象とします。gteプロパティと同じ値を指定できます。

    gteプロパティまたはltプロパティの両方またはいずれか一方を、必ず指定してください。

  • 演算子オブジェクト

    積集合(AND)、和集合(OR)、差集合(NOT)を使用して、複数のデモグラフィックフィルターオブジェクトから、新たなデモグラフィックフィルターオブジェクトを作成できます。1回のリクエストごとに、デモグラフィックフィルターオブジェクトは、合計10件まで指定できます。

    プロパティ タイプ 必須 説明
    type String 必須 operator
    and デモグラフィックフィルターオブジェクトの配列 配列で指定したデモグラフィックフィルターオブジェクトの積集合(AND)を、新たなデモグラフィックフィルターオブジェクトとする
    or デモグラフィックフィルターオブジェクトの配列 配列で指定したデモグラフィックフィルターオブジェクトの和集合(OR)を、新たなデモグラフィックフィルターオブジェクトとする
    not デモグラフィックフィルターオブジェクトの配列 配列で指定したデモグラフィックフィルターオブジェクトを配信対象外にした、新たなデモグラフィックフィルターオブジェクトとする

    andプロパティ、orプロパティ、notプロパティのいずれか1つだけ、必ず指定してください。また、空配列は指定できません。

レスポンス

HTTPステータスコード202を返します。

ナローキャストメッセージの送信状況を確認する方法について詳しくは、「ナローキャストメッセージの進行状況を取得する」を参照してください。

性別を使用してフィルタリングするデモグラフィックフィルターオブジェクトの例

{
    "type": "gender",
    "oneOf": [
        "male",
        "female"
    ]
}

ナローキャストメッセージの進行状況を取得する

ナローキャストメッセージの進行状況を取得します。

note 注意

サービス統合前のLINE公式アカウントおよびLINE@アカウントでは、このAPIは使用できません。サービス統合後のLINE公式アカウントに移行してください。詳しくは、「LINE@アカウントの移行」を参照してください。

note 最低送信対象数について

送信対象のユーザーの属性を推測できないようにするために、送信対象が「最低送信対象数」よりも少ない場合はナローキャストメッセージは送信できません。「最低送信対象数」は、LINEプラットフォームで定義されており、数値は非公開です。

note 進行状況を取得できる期間

ナローキャストメッセージの送信をリクエストしてから7日以上経過すると、進行状況は取得できません。

HTTPリクエスト

GET /v2/bot/message/progress/narrowcast

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 説明
requestId String

レスポンス

HTTPステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
phase String 進行状況。以下のいずれかの値です。
  • waiting:送信準備ができていません。フィルタリングなどを行っています。
  • sending:送信中です。
  • succeeded:送信が成功しました。
  • failed:送信が失敗しました。failedDescriptionプロパティで失敗した理由を確認できます。
successCount Number メッセージの受信に成功したユーザー数(※)
failureCount Number メッセージの受信に失敗したユーザー数(※)
targetCount Number メッセージが配信される予定のユーザー数(※)
failedDescription String 送信が失敗した理由。phaseプロパティがfailedの場合にのみ含まれます。
errorCode Number エラーの概要。以下のいずれかの値です。
  • 1:内部エラーが発生しました。
  • 2:送信対象が少なすぎたためエラーになりました。

phaseプロパティがwaitingの場合は取得できません。

エラーレスポンス

ナローキャストメッセージ以外のリクエストIDを指定した場合や、無効なリクエストIDを指定した場合は、HTTPステータスコード404を返します。

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/message/progress/narrowcast?requestId={request_id} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

ブロードキャストメッセージを送る

LINE公式アカウントと友だちになっているすべてのユーザーに、任意のタイミングでプッシュメッセージを送信します。

note 注意

サービス統合前のLINE公式アカウントおよびLINE@アカウントでは、このAPIは使用できません。サービス統合後のLINE公式アカウントに移行してください。詳しくは、「LINE@アカウントの移行」を参照してください。

HTTPリクエスト

POST https://api.line.me/v2/bot/message/broadcast

リクエストヘッダー

リクエストヘッダー 説明
Content-Type application/json
Authorization Bearer {channel access token}

リクエストボディ

プロパティ タイプ 必須 説明
messages メッセージオブジェクトの配列 必須 送信するメッセージ
最大件数:5
notificationDisabled Boolean 任意
  • true:メッセージ送信時に、ユーザーに通知されない。
  • false:メッセージ送信時に、ユーザーに通知される。ただし、LINEで通知をオフにしている場合は通知されません。
デフォルト値はfalseです。

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/message/broadcast \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
    "messages":[
        {
            "type":"text",
            "text":"Hello, world1"
        },
        {
            "type":"text",
            "text":"Hello, world2"
        }
    ]
}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

ステータスコード200と空のJSONオブジェクトを返します。

レスポンスの例

{}

コンテンツを取得する

ユーザーが送信した画像、動画、音声、およびファイルを取得するAPIです。

HTTPリクエスト

GET https://api-data.line.me/v2/bot/message/{messageId}/content

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 説明
messageId メッセージID

レスポンス

ステータスコード200とコンテンツのバイナリデータを返します。

メッセージが送信されてから一定期間後に、コンテンツは自動的に削除されます。コンテンツの保存期間は保証されません。

リクエストの例

curl -v -X GET https://api-data.line.me/v2/bot/message/{messageId}/content \
-H 'Authorization: Bearer {channel access token}'
final LineMessagingClient client = LineMessagingClient
        .builder("<channel access token>")
        .build();

final MessageContentResponse messageContentResponse;
try {
    messageContentResponse = client.getMessageContent("<messageId>").get();
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
    return;
}

Files.copy(messageContentResponse.getStream(),
           Files.createTempFile("foo", "bar"));
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
content, err := bot.GetMessageContent(<messageID>).Do()
if err != nil {
    ...
}
defer content.Content.Close()

...
client = Line::Bot::Client.new { |config|
    config.channel_secret = "<channel secret>"
    config.channel_token = "<channel access token>"
}
response = client.get_message_content("<messageId>")
case response
when Net::HTTPSuccess then
  tf = Tempfile.open("content")
  tf.write(response.body)
else
  p "#{response.code} #{response.body}"
end
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->getMessageContent('<messageId>');
if ($response->isSucceeded()) {
    $tempfile = tmpfile();
    fwrite($tempfile, $response->getRawBody());
} else {
    error_log($response->getHTTPStatus() . ' ' . $response->getRawBody());
}
use LINE::Bot::API;

my $bot = LINE::Bot::API->new(
    channel_secret       => "<channel secret>",
    channel_access_token => "<channel access token>",
);

my $res = $bot->get_message_content("<messageId>");
unless ($res->is_success) {
    # error handling
    ....
}
my $filename = $ret->fh->filename;
open my $fh, '<', $file or die "$!: $file";
from linebot import LineBotApi

line_bot_api = LineBotApi('<channel access token>')

message_content = line_bot_api.get_message_content('<message_id>')
with open(file_path, 'wb') as fd:
    for chunk in message_content.iter_content():
        fd.write(chunk)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.getMessageContent('<messageId>')
  .then((stream) => {
    stream.on('data', (chunk) => {
      ...
    });
    stream.on('error', (err) => {
      // error handling
    });
  });

追加メッセージ数の上限目安を取得する

当月分の上限目安を取得します。

この操作により取得されるメッセージ数には、LINE Official Account Managerから送信するメッセージの数も含まれます。

上限目安は、LINE Official Account Managerで設定します。手順については、LINE Official Account Managerのマニュアルを参照してください。

注:LINE@アカウントでは使用できません。

HTTPリクエスト

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/message/quota \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
type String 上限目安が設定されているかどうかを示す値。以下のどちらかになります。
  • none。上限目安が未設定であることを示します。
  • limited。上限目安が設定されていることを示します。
value Number 当月分の追加メッセージの上限目安。typeプロパティがlimitedの場合にのみ返されます。

レスポンスの例

{
  "type":"limited",
  "value":1000
}

当月のメッセージ利用状況を取得する

当月に送信されたメッセージの数を取得します。

この操作により取得されるメッセージ数には、LINE Official Account Managerから送信するメッセージの数も含まれます。

この操作により取得されるメッセージ数は概算です。正確なメッセージ送信数を取得するには、LINE Official Account Managerを使用するか、送信済みのメッセージ数を取得するAPI操作を実行してください。

注:LINE@アカウントでは使用できません。

HTTPリクエスト

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/message/quota/consumption \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
totalUsage Number 当月に送信されたメッセージの数

レスポンスの例

{
  "totalUsage":"500"
}

送信済みの応答メッセージの数を取得する

/bot/message/replyエンドポイントを使って送信されたメッセージの数を取得します。

この操作により取得されるメッセージ数に、LINE Official Account Managerから送信されたメッセージの数は含まれません。

HTTPリクエスト

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

クエリパラメータ

パラメータ 説明
date メッセージが送信された日付
  • フォーマット:yyyyMMdd(例:20191231
  • タイムゾーン:UTC+9

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/message/delivery/reply?date={yyyyMMdd} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
status String 集計処理の状態。以下のいずれかの値です。
  • ready:メッセージ数を取得できます。
  • unreadydateに指定した日付のメッセージ数の集計がまだ完了していません。しばらくしてからリクエストを再実行してください。通常、集計処理は翌日中に完了します。
  • out_of_servicedateに指定した日付が、集計システムの稼働開始日(2018年03月31日)より前です。
success Number dateに指定した日付に、Messaging APIを使って送信されたメッセージの数。statusの値がreadyの場合にのみ、レスポンスに含まれます。

レスポンスの例

{
  "status":"ready",
  "success":10000
}

送信済みのプッシュメッセージの数を取得する

/bot/message/pushエンドポイントを使って送信されたメッセージの数を取得します。

この操作により取得されるメッセージ数に、LINE Official Account Managerから送信されたメッセージの数は含まれません。

注:フリープランまたはベーシックプランのLINE@アカウントでは使用できません。

HTTPリクエスト

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

クエリパラメータ

パラメータ 説明
date メッセージが送信された日付
  • フォーマット:yyyyMMdd(例:20191231
  • タイムゾーン:UTC+9

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/message/delivery/push?date={yyyyMMdd} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
status String 集計処理の状態。以下のいずれかの値です。
  • ready:メッセージ数を取得できます。
  • unreadydateに指定した日付のメッセージ数の集計がまだ完了していません。しばらくしてからリクエストを再実行してください。通常、集計処理は翌日中に完了します。
  • out_of_servicedateに指定した日付が、集計システムの稼働開始日(2018年03月31日)より前です。
success Number dateに指定した日付に、Messaging APIを使って送信されたメッセージの数。statusの値がreadyの場合にのみ、レスポンスに含まれます。

レスポンスの例

{
  "status":"ready",
  "success":10000
}

送信済みのマルチキャストメッセージの数を取得する

/bot/message/multicastエンドポイントを使って送信されたメッセージの数を取得します。

この操作により取得されるメッセージ数に、LINE Official Account Managerから送信されたメッセージの数は含まれません。

注:フリープランまたはベーシックプランのLINE@アカウントでは使用できません。

HTTPリクエスト

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

クエリパラメータ

パラメータ 説明
date メッセージが送信された日付
  • フォーマット:yyyyMMdd(例:20191231
  • タイムゾーン:UTC+9

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/message/delivery/multicast?date={yyyyMMdd} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
status String 集計処理の状態。以下のいずれかの値です。
  • ready:メッセージ数を取得できます。
  • unreadydateに指定した日付のメッセージ数の集計がまだ完了していません。しばらくしてからリクエストを再実行してください。通常、集計処理は翌日中に完了します。
  • out_of_servicedateに指定した日付が、集計システムの稼働開始日(2018年03月31日)より前です。
success Number dateに指定した日付に、Messaging APIを使って送信されたメッセージの数。statusの値がreadyの場合にのみ、レスポンスに含まれます。

レスポンスの例

{
  "status":"ready",
  "success":10000
}

送信済みのブロードキャストメッセージの数を取得する

/bot/message/broadcastエンドポイントを使って送信されたメッセージの数を取得します。

この操作により取得されるメッセージ数に、LINE Official Account Managerから送信されたメッセージの数は含まれません。

note 注意

サービス統合前のLINE公式アカウントおよびLINE@アカウントでは、このAPIは使用できません。サービス統合後のLINE公式アカウントに移行してください。詳しくは、「LINE@アカウントの移行」を参照してください。

HTTPリクエスト

GET https://api.line.me/v2/bot/message/delivery/broadcast

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

クエリパラメータ

パラメータ 説明
date メッセージが送信された日付
  • フォーマット:yyyyMMdd(例:20191231
  • タイムゾーン:UTC+9

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/message/delivery/broadcast?date={yyyyMMdd} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
status String 集計処理の状態。以下のいずれかの値です。
  • ready:メッセージ数を取得できます。
  • unreadydateに指定した日付のメッセージ数の集計がまだ完了していません。しばらくしてからリクエストを再実行してください。通常、集計処理は翌日中に完了します。
  • out_of_servicedateに指定した日付が、集計システムの稼働開始日(2018年03月31日)より前です。
success Number dateに指定した日付に、Messaging APIを使って送信されたメッセージの数。statusの値がreadyの場合にのみ、レスポンスに含まれます。

レスポンスの例

{
  "status":"ready",
  "success":10000
}

オーディエンス管理

オーディエンスを作成して、メッセージを配信できます。なお、日本(JP)、タイ(TH)、台湾(TW)のユーザーが作成したLINE公式アカウントの場合のみ、オーディエンスを利用できます。

なお、オーディエンスには、以下の3種類があります。

ユーザーIDアップロード用のオーディエンスを作成する

ユーザーIDアップロード用のオーディエンスを作成します。オーディエンスは、合計1,000件まで作成できます。

ユーザーIDは、以下の方法で取得できます。

note 送信対象アカウントをIFAで指定するには手続きが必要です

送信対象アカウントをIFAで指定することもできますが、この機能をご利用いただくためには、所定の申請等が必要です。詳しくは、担当営業までご連絡いただくか、LINE for Businessウェブサイトからお問い合わせください。

HTTPリクエスト

POST https://api.line.me/v2/bot/audienceGroup/upload

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}
Content-Type application/json

リクエストボディ

プロパティ タイプ 必須 説明
description String 必須 オーディエンスの名前。他のオーディエンスと同じ名前は設定できません。なお、大文字と小文字は区別されません。
最大文字数:120
isIfaAudience Boolean 必須 送信対象アカウントをユーザーIDで指定する場合は、falseを指定します(標準)。送信対象アカウントをIFAで指定する場合は、trueを指定します。
uploadDescription String 任意 ジョブ(jobs[].description)に登録する説明
audiences Array 必須 ユーザーIDまたはIFAの配列
最大件数:10,000
audiences[].id String 必須 ユーザーIDまたはIFA

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/audienceGroup/upload \
-H 'Authorization: Bearer {channel access token}' \
-H 'Content-Type: application/json' \
-d '{
    "description": "audienceGroupName",
    "isIfaAudience": "false"
}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

HTTPステータスコード202とオーディエンスを返します。

プロパティ タイプ 説明
audienceGroupId Number オーディエンスID
type String UPLOAD
description String オーディエンスの名前
created Number オーディエンスが作成された時刻のUNIXタイム

エラーレスポンス

HTTPステータスコード400と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
message String エラーの概要
details String エラーの内容。以下のいずれかの値です。
  • AUDIENCE_GROUP_COUNT_MAX_OVER:作成できるオーディエンス数の上限(合計1,000件)に達しています。
  • AUDIENCE_GROUP_NAME_SIZE_OVER:オーディエンスの名前が長すぎます。
  • AUDIENCE_GROUP_NAME_DUPLICATE:既存のオーディエンスと同じ名前を指定しました。
  • AUDIENCE_GROUP_NAME_WRONG:オーディエンスの名前に、無効な文字(例:\nなどの制御コード)を指定しました。
  • AUDIENCE_GROUP_MISSING_AUDIENCESaudiencesプロパティが見つかりません。または、audiences[].idにユーザーIDまたはIFAが指定されていません。
  • AUDIENCE_GROUP_MISSING_IS_IFA_AUDIENCEisIfaAudienceプロパティが見つかりません。
  • UPLOAD_AUDIENCE_GROUP_INVALID_AUDIENCE_ID_FORMATaudiences[].idプロパティに無効なユーザーIDまたはIFAが指定されています。
  • UPLOAD_AUDIENCE_GROUP_TOO_MANY_AUDIENCE_IDS:ユーザーIDまたはIFAの登録上限に達しています。

レスポンスの例

{
    "audienceGroupId": 4389303728991,
    "type": "UPLOAD",
    "description": "test",
    "created": 1500351844
}

ユーザーIDアップロード用のオーディエンスにユーザーIDまたはIFAを追加する

ユーザーIDアップロード用のオーディエンスに、ユーザーIDまたはIFAを追加します。

note リクエストタイムアウト値について

リクエストタイムアウトを30秒以上に設定することを強く推奨します。

note ユーザーIDまたはIFAの種類は変更できません

ユーザーIDアップロード用のオーディエンスを作成したときと同じ種類(ユーザーIDまたはIFA)のデータを追加してください。たとえば、初めにIFAを指定して作成したオーディエンスに、ユーザーIDを指定することはできません。

オーディエンスを作成したときに指定した送信対象アカウントの種類(ユーザーIDまたはIFA)は、オーディエンスのisIfaAudienceプロパティで確認できます。詳しくは、「オーディエンスの情報を取得する」を参照してください。

note ユーザーIDまたはIFAは削除できません

一度追加したユーザーIDまたはIFAを削除することはできません。

HTTPリクエスト

PUT https://api.line.me/v2/bot/audienceGroup/upload

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}
Content-Type application/json

リクエストボディ

プロパティ タイプ 必須 説明
audienceGroupId Number 必須 オーディエンスID
description String 任意 オーディエンスの名前。他のオーディエンスと同じ名前は設定できません。なお、大文字と小文字は区別されません。
最大文字数:120
uploadDescription String 任意 ジョブ(jobs[].description)に登録する説明
audiences Array 必須 ユーザーIDまたはIFAの配列
最大件数:10,000
audiences[].id String 必須 ユーザーIDまたはIFA

レスポンス

HTTPステータスコード202を返します。

エラーレスポンス

HTTPステータスコード400と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
message String エラーの概要
details String エラーの内容。以下のいずれかの値です。
  • AUDIENCE_GROUP_NAME_SIZE_OVER:オーディエンスの名前が長すぎます。
  • AUDIENCE_GROUP_NAME_DUPLICATE:既存のオーディエンスと同じ名前を指定しました。
  • AUDIENCE_GROUP_NAME_WRONG:オーディエンスの名前に、無効な文字(例:\nなどの制御コード)を指定しました。
  • UPLOAD_AUDIENCE_GROUP_INVALID_AUDIENCE_ID_FORMATaudiences[].idプロパティに無効なユーザーIDまたはIFAが指定されています。
  • UPLOAD_AUDIENCE_GROUP_TOO_MANY_AUDIENCE_IDS:ユーザーIDまたはIFAの登録上限に達しています。
  • UPLOAD_AUDIENCE_GROUP_NO_VALID_AUDIENCE_IDS:有効なユーザーIDまたはIFAが指定されていません。
  • AUDIENCE_GROUP_CAN_NOT_UPLOAD_STATUS_EXPIRED:オーディエンス作成後、180日以上が経過しました。このオーディエンスは使用できません。

リクエストの例

curl -v -X PUT https://api.line.me/v2/bot/audienceGroup/upload \
-H 'Authorization: Bearer {channel access token}' \
-H 'Content-Type: application/json' \
-d '{
    "audienceGroupId": 4389303728991,
    "description": "audienceGroupName",
    "uploadDescription": "fileName",
    "audiences": [
        {
            "id": "u1000"
        },
        {
            "id": "u2000"
        }
    ]
}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

クリックリターゲティング用のオーディエンスを作成する

クリックリターゲティング用のオーディエンスを作成します。オーディエンスは、合計1,000件まで作成できます。

クリックリターゲティング用のオーディエンスは、ブロードキャストメッセージまたはナローキャストメッセージに設定されたURLをクリックしたユーザーを集めたオーディエンスです。

メッセージは、リクエストIDで指定します。少なくとも1つのリンクをクリックしたユーザーが送信対象になります。

HTTPリクエスト

POST https://api.line.me/v2/bot/audienceGroup/click

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}
Content-Type application/json

リクエストボディ

プロパティ タイプ 必須 説明
description String 必須 オーディエンスの名前。他のオーディエンスと同じ名前は設定できません。なお、大文字と小文字は区別されません。
最大文字数:120
requestId String 必須 配信から60日以内のブロードキャストメッセージまたはナローキャストメッセージのリクエストID。リクエストIDは、Messaging APIのリクエストごとに発行されるIDです。レスポンスヘッダーに含まれます。
clickUrl String 任意 ユーザーがクリックしたURL。省略した場合は、メッセージ内の任意のURLをクリックしたユーザーが送信対象になります。
最大文字数:2,000

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/audienceGroup/click \
-H 'Authorization: Bearer {channel access token}' \
-H 'Content-Type: application/json' \
-d '{
    "description": "audienceGroupName",
    "messageIds": [
        "123",
        "124"
    ],
    "requestId": "12222",
    "clickUrl": "https://line.me/en"
}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

HTTPステータスコード202とオーディエンスを返します。

プロパティ タイプ 説明
audienceGroupId Number オーディエンスID
type String CLICK
description String オーディエンスの名前
created Number オーディエンスが作成された時刻のUNIXタイム
requestId String オーディエンスを作成したときに指定したリクエストID
clickUrl String オーディエンスを作成したときに指定したURL

エラーレスポンス

HTTPステータスコード400と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
message String エラーの概要
details String エラーの内容。以下のいずれかの値です。
  • AUDIENCE_GROUP_COUNT_MAX_OVER:作成できるオーディエンス数の上限(合計1,000件)に達しています。
  • AUDIENCE_GROUP_NAME_SIZE_OVER:オーディエンスの名前が長すぎます。
  • AUDIENCE_GROUP_NAME_DUPLICATE:既存のオーディエンスと同じ名前を指定しました。
  • AUDIENCE_GROUP_NAME_WRONG:オーディエンスの名前に、無効な文字(例:\nなどの制御コード)を指定しました。
  • AUDIENCE_GROUP_REQUESTID_DUPLICATE:既存のオーディエンスに指定したリクエストIDと同じ値を指定しました。
  • WRONG_BOT_ID:指定されたリクエストIDに含まれるボットIDが、チャネルに関連付けられたボットと異なります。
  • TOO_OLD_MESSAGES:メッセージを配信してから61日以上経過した場合は、そのメッセージ(リクエストID)に対するオーディエンスは作成できません。

レスポンスの例

{
    "audienceGroupId": 4389303728991,
    "type": "CLICK",
    "description": "test",
    "created": 1500351844,
    "requestId": "f70dd685-499a-4231-a441-f24b8d4fba21",
    "clickUrl": null
}

インプレッションリターゲティング用のオーディエンスを作成する

インプレッションリターゲティング用のオーディエンスを作成します。オーディエンスは、合計1,000件まで作成できます。

インプレッションリターゲティング用のオーディエンスは、ブロードキャストメッセージまたはナローキャストメッセージを表示したユーザーを集めたオーディエンスです。

メッセージは、リクエストIDで指定します。少なくとも1つの吹き出しを表示したユーザーが送信対象になります。

HTTPリクエスト

POST https://api.line.me/v2/bot/audienceGroup/imp

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}
Content-Type application/json

リクエストボディ

プロパティ タイプ 必須 説明
description String 必須 オーディエンスの名前。他のオーディエンスと同じ名前は設定できません。なお、大文字と小文字は区別されません。
最大文字数:120
requestId String 必須 配信から60日以内のブロードキャストメッセージまたはナローキャストメッセージのリクエストID。リクエストIDは、Messaging APIのリクエストごとに発行されるIDです。レスポンスヘッダーに含まれます。

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/audienceGroup/imp \
-H 'Authorization: Bearer {channel access token}' \
-H 'Content-Type: application/json' \
-d '{
    "description": "audienceGroupName",
    "messageIds": [
        "123",
        "124"
    ],
    "requestId": "12222"
}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

HTTPステータスコード202とオーディエンスを返します。

プロパティ タイプ 説明
audienceGroupId Number オーディエンスID
type String IMP
description String オーディエンスの名前
created Number オーディエンスが作成された時刻のUNIXタイム
requestId String オーディエンスを作成したときに指定したリクエストID

エラーレスポンス

HTTPステータスコード400と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
message String エラーの概要
details String エラーの内容。以下のいずれかの値です。
  • AUDIENCE_GROUP_COUNT_MAX_OVER:作成できるオーディエンス数の上限(合計1,000件)に達しています。
  • AUDIENCE_GROUP_NAME_SIZE_OVER:オーディエンスの名前が長すぎます。
  • AUDIENCE_GROUP_NAME_DUPLICATE:既存のオーディエンスと同じ名前を指定しました。
  • AUDIENCE_GROUP_NAME_WRONG:オーディエンスの名前に、無効な文字(例:\nなどの制御コード)を指定しました。
  • AUDIENCE_GROUP_REQUESTID_DUPLICATE:既存のオーディエンスに指定したリクエストIDと同じ値を指定しました。
  • WRONG_BOT_ID:指定されたリクエストIDに含まれるボットIDが、チャネルに関連付けられたボットと異なります。
  • TOO_OLD_MESSAGES:メッセージを配信してから60日以上経過した場合は、そのメッセージ(リクエストID)に対するオーディエンスは作成できません。

レスポンスの例

{
    "audienceGroupId": 4389303728991,
    "type": "IMP",
    "description": "test",
    "created": 1500351844,
    "requestId": "f70dd685-499a-4231-a441-f24b8d4fba21"
}

オーディエンスの名前を更新する

既存のオーディエンスの名前を変更します。

HTTPリクエスト

PUT https://api.line.me/v2/bot/audienceGroup/{audienceGroupId}/updateDescription

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}
Content-Type application/json

パスパラメータ

パラメータ 説明
audienceGroupId オーディエンスID

リクエストボディ

プロパティ タイプ 必須 説明
description String 必須 オーディエンスの名前。他のオーディエンスと同じ名前は設定できません。なお、大文字と小文字は区別されません。
最大文字数:120

レスポンス

HTTPステータスコード200を返します。

エラーレスポンス

HTTPステータスコード400と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
message String エラーの概要
details String エラーの内容。以下のいずれかの値です。
  • AUDIENCE_GROUP_NAME_SIZE_OVER:オーディエンスの名前が長すぎます。
  • AUDIENCE_GROUP_NAME_DUPLICATE:既存のオーディエンスと同じ名前を指定しました。
  • AUDIENCE_GROUP_NAME_WRONG:オーディエンスの名前に、無効な文字(例:\nなどの制御コード)を指定しました。

リクエストの例

curl -v -X PUT https://api.line.me/v2/bot/audienceGroup/{audienceGroupId}/updateDescription \
-H 'Authorization: Bearer {channel access token}' \
-H 'Content-Type: application/json' \
-d '{
    "description": "audienceGroupName"
}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

オーディエンスを削除する

オーディエンスを削除します。

warning 削除したオーディエンスは元に戻せません

削除する前に、オーディエンスが使用されていないことを確認してください。

HTTPリクエスト

DELETE https://api.line.me/v2/bot/audienceGroup/{audienceGroupId}

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 説明
audienceGroupId オーディエンスID

レスポンス

HTTPステータスコード202を返します。

エラーレスポンス

HTTPステータスコード400と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
message String エラーの概要
details String エラーの内容。以下のいずれかの値です。
  • AUDIENCE_GROUP_NOT_FOUND:オーディエンスが見つかりません。

リクエストの例

curl -v -X DELETE https://api.line.me/v2/bot/audienceGroup/{audienceGroupId} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

オーディエンスの情報を取得する

オーディエンスの情報を取得します。

HTTPリクエスト

GET https://api.line.me/v2/bot/audienceGroup/{audienceGroupId}

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 説明
audienceGroupId オーディエンスID

レスポンス

HTTPステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
audienceGroupId Number オーディエンスID
type String オーディエンスのタイプ。以下のいずれかの値です。
  • UPLOAD:ユーザーIDアップロード用のオーディエンス
  • CLICK:クリックリターゲティング用のオーディエンス
  • IMP:インプレッションリターゲティング用のオーディエンス
description String オーディエンスの名前
status String オーディエンスのステータス。以下のいずれかの値です。
  • IN_PROGRESS:準備中。READYになるまで数時間かかる場合があります。
  • READY:配信に利用可能
  • FAILED:作成時にエラーが発生
  • EXPIRED:有効期限切れ。有効期限切れ後、1か月後に自動で削除されます。
failedType String 失敗した原因。statusがFAILEDの場合にのみ含まれます。以下のいずれかの値です。
  • AUDIENCE_GROUP_AUDIENCE_INSUFFICIENT:オーディエンスに含まれる送信対象アカウントの数(最低100件)が不足しています。
  • INTERNAL_ERROR:内部サーバーのエラーです。
audienceCount Number 有効な送信対象アカウントの数
created Number オーディエンスが作成された時刻のUNIXタイム
requestId String オーディエンスを作成したときに指定したリクエストID。typeがCLICKまたはIMPの場合にのみ含まれます。
clickUrl String オーディエンスを作成したときに指定したURL。typeがCLICKの場合にのみ含まれます。
isIfaAudience Boolean ユーザーIDアップロード用のオーディエンスを作成したときに指定した、送信対象アカウントの種類を示す値。以下のいずれかの値です。
  • true:IFAで指定する
  • false:ユーザーIDで指定する(標準)
jobs Array ジョブの配列。ユーザーIDアップロード用のオーディエンスに、ユーザーIDまたはIFAを追加した履歴を管理する配列です。それ以外のオーディエンスの場合はnullが返ります。
jobs[].audienceGroupJobId Number ジョブID
jobs[].audienceGroupId Number オーディエンスID
jobs[].description String ジョブの説明
jobs[].type String ジョブの種類。以下のいずれかの値です。
  • DIFF_ADD:Messaging APIでユーザーIDまたはIFAを追加したことを示します。
jobs[].jobStatus String ジョブのステータス。以下のいずれかの値です。
  • QUEUED:待機中
  • WORKING:実行中
  • FINISHED:成功
  • FAILED:失敗
jobs[].failedType String 失敗した原因。jobs[].jobStatusがFAILEDの場合にのみ含まれます。以下のいずれかの値です。
  • INTERNAL_ERROR:内部サーバーのエラーです。
jobs[].audienceCount Number 追加または削除された送信対象アカウントの数
jobs[].created Number ジョブが作成された時刻のUNIXタイム

エラーレスポンス

HTTPステータスコード400と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
message String エラーの概要
details String エラーの内容。以下のいずれかの値です。
  • AUDIENCE_GROUP_NOT_FOUND:オーディエンスが見つかりません。

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/audienceGroup/{audienceGroupId} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

複数のオーディエンスの情報を取得する

複数のオーディエンスの情報を取得します。

HTTPリクエスト

GET https://api.line.me/v2/bot/audienceGroup/list

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

クエリパラメータ

パラメータ 必須 説明
page 必須 取得するページ番号。1以上を指定してください。
description 任意 取得するオーディエンスの名前。部分一致で検索できます。大文字と小文字は区別されません。
status 任意 オーディエンスのステータス。以下のいずれかの値です。
  • IN_PROGRESS:準備中。READYになるまで数時間かかる場合があります。
  • READY:配信に利用可能
  • FAILED:作成時にエラーが発生
  • EXPIRED:有効期限切れ。有効期限切れ後、1か月後に自動で削除されます。
size 任意 1ページごとのオーディエンス数。デフォルト値は20です。
最大値:40

レスポンス

HTTPステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
audienceGroups Array オーディエンスの情報の配列
audienceGroups[].audienceGroupId Number オーディエンスID
audienceGroups[].type String オーディエンスのタイプ。以下のいずれかの値です。
  • UPLOAD:ユーザーIDアップロード用のオーディエンス
  • CLICK:クリックリターゲティング用のオーディエンス
  • IMP:インプレッションリターゲティング用のオーディエンス
audienceGroups[].description String オーディエンスの名前
audienceGroups[].status String オーディエンスのステータス。以下のいずれかの値です。
  • IN_PROGRESS:準備中。READYになるまで数時間かかる場合があります。
  • READY:配信に利用可能
  • FAILED:作成時にエラーが発生
  • EXPIRED:有効期限切れ。有効期限切れ後、1か月後に自動で削除されます。
audienceGroups[].failedType String 失敗した原因。audienceGroups[].statusがFAILEDまたはEXPIREDの場合にのみ含まれます。以下のいずれかの値です。
  • AUDIENCE_GROUP_AUDIENCE_INSUFFICIENT:オーディエンスに含まれる送信対象アカウントの数(最低100件)が不足しています。
  • INTERNAL_ERROR:内部サーバーのエラーです。
audienceGroups[].audienceCount Number 有効な送信対象アカウントの数
audienceGroups[].created Number オーディエンスが作成された時刻のUNIXタイム
audienceGroups[].requestId String オーディエンスを作成したときに指定したリクエストID。audienceGroups[].typeがCLICKまたはIMPの場合にのみ含まれます。
audienceGroups[].clickUrl String オーディエンスを作成したときに指定したURL。audienceGroups[].typeがCLICKの場合にのみ含まれます。
audienceGroups[].isIfaAudience Boolean ユーザーIDアップロード用のオーディエンスを作成したときに指定した、送信対象アカウントの種類を示す値。以下のいずれかの値です。
  • true:IFAで指定する
  • false:ユーザーIDで指定する(標準)
hasNextPage Boolean 次のページが存在する場合は、true
totalCount Int 指定した条件で取得できるオーディエンスの総数
page Int 現在のページ番号
size Int 現在のページに含まれるオーディエンス数

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/audienceGroup/list?description={description}&page=1&size=20 \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

分析

メッセージの送信数を取得する

LINE公式アカウントから送信したメッセージの数を確認できます。

note 注意

サービス統合前のLINE公式アカウントおよびLINE@アカウントでは、このAPIは使用できません。サービス統合後のLINE公式アカウントに移行してください。詳しくは、「LINE@アカウントの移行」を参照してください。

HTTPリクエスト

GET https://api.line.me/v2/bot/insight/message/delivery?date={date}

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

クエリパラメータ

パラメータ 必須 説明
date 必須 メッセージの送信数を確認する日付
  • フォーマット:yyyyMMdd(例:20191231
  • タイムゾーン:UTC+9

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/insight/message/delivery?date=20190418 \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.get_number_of_message_deliveries("20190101")
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
status String 集計処理の状態。以下のいずれかの値です。
  • ready:メッセージ数を取得できます。
  • unreadydateに指定した日付のメッセージ数の集計がまだ完了していません。しばらくしてからリクエストを再実行してください。通常、集計処理は翌日中に完了します。
  • out_of_servicedateに指定した日付が、集計システムの稼働開始日(2017年03月01日)より前です。
broadcast Number LINE公式アカウントと友だちになっているすべてのユーザーに送信されたプッシュメッセージ(ブロードキャストメッセージ)の数。
targeting Number LINE公式アカウントと友だちになっているユーザーの中から属性で絞り込んで送信されたプッシュメッセージ(ターゲティングメッセージ、セグメントメッセージ)の数。
autoResponse Number 送信された応答メッセージの数。
welcomeResponse Number 送信されたあいさつメッセージの数。
chat Number LINE Official Account Managerの「チャット基本画面」から送信されたメッセージの数。
apiBroadcast Number ブロードキャストメッセージを送る」で送信されたメッセージの数。
apiPush Number プッシュメッセージを送る」で送信されたメッセージの数。
apiMulticast Number マルチキャストメッセージを送る」で送信されたメッセージの数。
apiReply Number 応答メッセージを送る」で送信されたメッセージの数。

broadcast以降のプロパティは、dateに指定した日付に送信されたメッセージの数です。なお、statusの値がreadyの場合にのみレスポンスに含まれます。

レスポンスの例

{
    "status": "ready",
    "broadcast": 5385,
    "targeting": 522
}

友だち数を取得する

LINE公式アカウントの友だち数を確認できます。

note 注意

サービス統合前のLINE公式アカウントおよびLINE@アカウントでは、このAPIは使用できません。サービス統合後のLINE公式アカウントに移行してください。詳しくは、「LINE@アカウントの移行」を参照してください。

HTTPリクエスト

GET https://api.line.me/v2/bot/insight/followers?date={date}

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

クエリパラメータ

パラメータ 必須 説明
date 必須 友だち数を確認する日付
  • フォーマット:yyyyMMdd(例:20191231
  • タイムゾーン:UTC+9

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/insight/followers?date=20190418 \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.get_number_of_followers("20190101")
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
status String 集計処理の状態。以下のいずれかの値です。
  • ready:数値を取得できます。
  • unreadydateに指定した日付の友だち数の集計がまだ完了していません。しばらくしてからリクエストを再実行してください。通常、集計処理は翌日中に完了します。
  • out_of_servicedateに指定した日付が、集計システムの稼働開始日(2016年11月01日)より前です。
followers Number dateに指定した日付までに、アカウントが友だち追加された回数。アカウントがブロックされたり、あなたを友だち追加したユーザーがLINEアカウントを削除したりしても、この値は減少しません。
targetedReaches Number dateに指定した日付時点の、性別や年齢、地域で絞り込んだターゲティングメッセージの配信先となりうる友だちの総数。LINEおよびその他のLINEサービスの利用頻度が高く、属性の高精度な推定が可能な友だちが含まれます。
blocks Number dateに指定した日付時点で、アカウントをブロックしているユーザーの数。ブロックが解除されると、この値は減少します。

followers以降のプロパティは、statusの値がreadyの場合にのみレスポンスに含まれます。

レスポンスの例

{
    "status": "ready",
    "followers": 7620,
    "targetedReaches": 5848,
    "blocks": 237
}

友だちの属性情報に基づく統計情報を取得する

LINE公式アカウントの友だちの属性情報に基づく統計情報を確認できます。なお、日本(JP)、タイ(TH)、台湾(TW)のユーザーが作成したLINE公式アカウントの場合のみ、統計情報を確認できます。

note 注意

サービス統合前のLINE公式アカウントおよびLINE@アカウントでは、このAPIは使用できません。サービス統合後のLINE公式アカウントに移行してください。詳しくは、「LINE@アカウントの移行」を参照してください。

note リアルタイムデータではありません

友だちの統計情報が反映されるまで最大3日ほどかかります。 そのため、取得できる情報は3日前の数値です。また、統計情報を表示するには20人以上のターゲットリーチが必要です。

HTTPリクエスト

GET https://api.line.me/v2/bot/insight/demographic

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/insight/demographic \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.get_friend_demographics
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
available Boolean 友だちの属性情報に基づく統計情報が利用できる場合は、true
genders Array 性別ごとの割合
genders[].gender String 性別
genders[].percentage Number 割合
ages Array 年齢ごとの割合
ages[].age String 年齢
ages[].percentage Number 割合
areas Array 地域ごとの割合
areas[].area String 地域
areas[].percentage Number 割合
appTypes Array OSごとの割合
appTypes[].appType String OS
appTypes[].percentage Number 割合
subscriptionPeriods Array 友だち期間ごとの割合
subscriptionPeriods[].subscriptionPeriod String 友だち期間
subscriptionPeriods[].percentage Number 割合

各Arrayの要素は、availableの値がtrueの場合にのみレスポンスに含まれます。

レスポンスの例

{
    "available": true,
    "genders": [
        {
            "gender": "unknown",
            "percentage": 37.6
        },
        {
            "gender": "male",
            "percentage": 31.8
        },
        {
            "gender": "female",
            "percentage": 30.6
        }
    ],
    "ages": [
        {
            "age": "unknown",
            "percentage": 37.6
        },
        {
            "age": "from50",
            "percentage": 17.3
        },
        ...
    ],
    "areas": [
        {
            "area": "unknown",
            "percentage": 42.9
        },
        {
            "area": "徳島",
            "percentage": 2.9
        },
        ...
    ],
    "appTypes": [
        {
            "appType": "ios",
            "percentage": 62.4
        },
        {
            "appType": "android",
            "percentage": 27.7
        },
        {
            "appType": "others",
            "percentage": 9.9
        }
    ],
    "subscriptionPeriods": [
        {
            "subscriptionPeriod": "over365days",
            "percentage": 96.4
        },
        {
            "subscriptionPeriod": "within365days",
            "percentage": 1.9
        },
        {
            "subscriptionPeriod": "within180days",
            "percentage": 1.2
        },
        {
            "subscriptionPeriod": "within90days",
            "percentage": 0.5
        },
        {
            "subscriptionPeriod": "within30days",
            "percentage": 0.1
        },
        {
            "subscriptionPeriod": "within7days",
            "percentage": 0
        }
    ]
}

ユーザーの操作に基づく統計情報を取得する

LINE公式アカウントから送信したブロードキャストメッセージに対して、ユーザーがどのように操作したかを示す統計情報を確認できます。

1メッセージ(message)単位、および1吹き出し(bubble)単位で統計情報を取得できます。

message and bubbles

note 注意

サービス統合前のLINE公式アカウントおよびLINE@アカウントでは、このAPIは使用できません。サービス統合後のLINE公式アカウントに移行してください。詳しくは、「LINE@アカウントの移行」を参照してください。

note 記録される統計情報について

統計情報は、メッセージを送信した日から14日分のみ記録されます。送信した日から15日以上が経過しても、統計情報は更新されません。

HTTPリクエスト

GET https://api.line.me/v2/bot/insight/message/event?requestId={requestId}

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

クエリパラメータ

パラメータ 必須 説明
requestId 必須 ブロードキャストメッセージのリクエストID。リクエストIDは、Messaging APIのリクエストごとに発行されるIDです。レスポンスヘッダーに含まれます。

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/insight/message/event?requestId=f70dd685-499a-4231-a441-f24b8d4fba21 \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
// No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

note 注意

プライバシーを保護するために、個人の操作に関するプロパティの値はnullまたは-1になる場合があります。

  • null:overview.uniqueImpressionが20未満
  • -1:overview.uniqueImpressionが20以上だが、当該プロパティの値が20未満
プロパティ タイプ 説明
overview Object メッセージに関する統計情報。
overview.requestId String リクエストID。
overview.timestamp Number メッセージが配信された時刻のUNIXタイム。
overview.delivered Number メッセージの送信数。この値は、20未満の数値も表示されます。ただし、メッセージの送信がすべて完了していない場合はnullになります。
overview.uniqueImpression Number メッセージを開封した人数。少なくとも1つの吹き出しを表示した人数です。
overview.uniqueClick Number メッセージ内のいずれかのURLをタップした人数。
overview.uniqueMediaPlayed Number メッセージ内のいずれかの動画または音声の再生を開始した人数。
overview.uniqueMediaPlayed100Percent Number メッセージ内のいずれかの動画または音声を最後まで視聴した人数。
messages Array 吹き出しに関する情報を表す配列。
messages[].seq Number 吹き出しの通し番号。
messages[].impression Number 吹き出しが表示された回数。
messages[].mediaPlayed Number 吹き出し内の動画または音声が再生開始された回数。
messages[].mediaPlayed25Percent Number 吹き出し内の動画または音声が再生開始され、25%再生された回数。
messages[].mediaPlayed50Percent Number 吹き出し内の動画または音声が再生開始され、50%再生された回数。
messages[].mediaPlayed75Percent Number 吹き出し内の動画または音声が再生開始され、75%再生された回数。
messages[].mediaPlayed100Percent Number 吹き出し内の動画または音声が再生開始され、100%再生された回数。
messages[].uniqueMediaPlayed Number 吹き出し内の動画または音声を再生開始した人数。
messages[].uniqueMediaPlayed25Percent Number 吹き出し内の動画または音声を再生開始し、25%再生した人数。
messages[].uniqueMediaPlayed50Percent Number 吹き出し内の動画または音声を再生開始し、50%再生した人数。
messages[].uniqueMediaPlayed75Percent Number 吹き出し内の動画または音声を再生開始し、75%再生した人数。
messages[].uniqueMediaPlayed100Percent Number 吹き出し内の動画または音声を再生開始し、100%再生した人数。
clicks Array タップしたURLに関する情報を表す配列。
clicks[].seq Number URLが含まれていた吹き出しの通し番号。
clicks[].url String URL。
clicks[].click Number 吹き出し内のURLをタップした回数。
clicks[].uniqueClick Number 吹き出し内のURLをタップした人数。
clicks[].uniqueClickOfRequest Number メッセージ内のURLのうちurlと同じURLをタップした人数。ほかの吹き出しに同じURLが設定されている場合に、1人のユーザーが各URLをタップした場合でも、1回だけカウントされます。

レスポンスの例

{
    "overview": {
        "requestId": "f70dd685-499a-4231-a441-f24b8d4fba21",
        "timestamp": 1568214000,
        "delivered": 32,
        "uniqueImpression": 4,
        "uniqueClick": null,
        "uniqueMediaPlayed": 2,
        "uniqueMediaPlayed100Percent": -1
    },
    "messages": [
        {
            "seq": 1,
            "impression": 18,
            "mediaPlayed": 11,
            "mediaPlayed25Percent": -1,
            "mediaPlayed50Percent": -1,
            "mediaPlayed75Percent": -1,
            "mediaPlayed100Percent": -1,
            "uniqueMediaPlayed": 2,
            "uniqueMediaPlayed25Percent": -1,
            "uniqueMediaPlayed50Percent": -1,
            "uniqueMediaPlayed75Percent": -1,
            "uniqueMediaPlayed100Percent": -1
        }
    ],
    "clicks": [
        {
            "seq": 1,
            "url": "https://www.yahoo.co.jp/",
            "click": -1,
            "uniqueClick": -1,
            "uniqueClickOfRequest": -1
        },
        {
            "seq": 1,
            "url": "https://www.google.com/?hl=ja",
            "click": -1,
            "uniqueClick": -1,
            "uniqueClickOfRequest": -1
        }
    ]
}

プロフィール

プロフィールを取得する

ユーザープロフィール情報を取得するAPIです。

HTTPリクエスト

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 説明
userId Webhookイベントオブジェクトで返されるユーザーID。LINEに表示されるLINE IDは使用しないでください。

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/profile/{userId} \
-H 'Authorization: Bearer {channel access token}'
final LineMessagingClient client = LineMessagingClient
        .builder("<channel access token>")
        .build();

final UserProfileResponse userProfileResponse;
try {
    userProfileResponse = client.getProfile("<userId>").get();
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
    return;
}

System.out.println(userProfileResponse.getUserId());
System.out.println(userProfileResponse.getDisplayName());
System.out.println(userProfileResponse.getPictureUrl());
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
res, err := bot.GetProfile(<userId>).Do();
if err != nil {
    ...
}
println(res.Displayname)
println(res.PicutureURL)
println(res.StatusMessage)
client = Line::Bot::Client.new { |config|
    config.channel_secret = "<channel secret>"
    config.channel_token = "<channel access token>"
}
response = client.get_profile("<userId>")
case response
when Net::HTTPSuccess then
  contact = JSON.parse(response.body)
  p contact['displayName']
  p contact['pictureUrl']
  p contact['statusMessage']
else
  p "#{response.code} #{response.body}"
end
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->getProfile('<userId>');
if ($response->isSucceeded()) {
    $profile = $response->getJSONDecodedBody();
    echo $profile['displayName'];
    echo $profile['pictureUrl'];
    echo $profile['statusMessage'];
}
use LINE::Bot::API;

my $bot = LINE::Bot::API->new(
    channel_secret       => "<channel secret>",
    channel_access_token => "<channel access token>",
);

my $res = $bot->get_profile("<userId>");
unless ($res->is_success) {
    # error handling
    ....
}

say $ret->display_name;
say $ret->user_id;
say $ret->picture_url;
say $ret->status_message;
from linebot import LineBotApi
from linebot.exceptions import LineBotApiError

line_bot_api = LineBotApi('<channel access token>')

try:
    profile = line_bot_api.get_profile('<user_id>')
except LineBotApiError as e:
    # error handle
    ...
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.getProfile('<userId>')
  .then((profile) => {
    console.log(profile.displayName);
    console.log(profile.userId);
    console.log(profile.pictureUrl);
    console.log(profile.statusMessage);
  })
  .catch((err) => {
    // error handling
  });

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
displayName String ユーザーの表示名
userId String ユーザーID
pictureUrl String プロフィール画像のURL。スキームはhttpsです。ユーザーがプロフィール画像を設定していない場合はレスポンスに含まれません。
statusMessage String ユーザーのステータスメッセージ。ユーザーがステータスメッセージを設定していない場合はレスポンスに含まれません。

レスポンスの例

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

グループ

グループメンバーのユーザーIDを取得する

note 注意

この機能は認証済みアカウントまたはプレミアムアカウントのみでご利用いただけます。アカウント種別について詳しくは、LINE for BusinessウェブサイトのLINE Account Connectページをご覧ください。

LINE公式アカウントが参加しているグループのメンバーの、ユーザーIDを取得するAPIです。LINE公式アカウントを友だちとして追加していないユーザーや、LINE公式アカウントをブロックしているユーザーのユーザーIDも取得します。

HTTPリクエスト

GET https://api.line.me/v2/bot/group/{groupId}/members/ids

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 必須 説明
groupId 必須 グループID。Webhookイベントオブジェクトsourceオブジェクトで返されます。

クエリパラメータ

パラメータ 必須 説明
start 任意 継続トークンの値。レスポンスで返されるJSONオブジェクトのnextプロパティに含まれます。1回のリクエストでユーザーIDをすべて取得できない場合は、このパラメータを指定して残りの配列を取得します。

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/group/{groupId}/members/ids?start={continuationToken} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.get_group_member_ids(<groupId>, <continuationToken>)
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
res, err := bot.GetGroupMemberIDs(<groupId>, <continuationToken>).Do()
if err != nil {
    ...
}
for _, id := range res.MemberIDs {
    println(id)
}
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->getGroupMemberIds(<groupId>, <continuationToken>);
# No sample code available
member_ids_res = line_bot_api.get_group_member_ids(<group_id>)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.getGroupMemberIds('<groupId>')
  .then((ids) => {
    ids.forEach((id) => console.log(id));
  })
  .catch((err) => {
    // error handling
  });

レスポンス

ステータスコード200と以下のプロパティを含むJSONオブジェクトを返します。

プロパティ タイプ 説明
memberIds 文字列の配列 グループメンバーのユーザーIDのリスト。LINEバージョン7.4.x以前を使用しているユーザーは、memberIdsに含まれません。詳しくは、「ユーザーの同意」を参照してください。
最大ユーザー数:100
next String 継続トークン。グループメンバーのユーザーIDの、次の配列を取得するために使用します。このプロパティは、前回までのレスポンスのmemberIdsで取得しきれなかったユーザーIDがある場合にのみ返されます。

レスポンスの例

{  
   "memberIds":[  
      "U4af4980629...",
      "U0c229f96c4...",
      "U95afb1d4df..."
   ],
   "next":"jxEWCEEP..."
}

グループメンバーのプロフィールを取得する

LINE公式アカウントが参加しているグループのメンバーのユーザーIDが既知である場合に、そのメンバーのユーザープロフィールを取得するAPIです。LINE公式アカウントを友だちとして追加していないユーザーや、LINE公式アカウントをブロックしているユーザーのプロフィールも取得します。

HTTPリクエスト

GET https://api.line.me/v2/bot/group/{groupId}/member/{userId}

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 説明
groupId グループID。Webhookイベントオブジェクトsourceオブジェクトで返されます。
userId ユーザーID。Webhookイベントオブジェクトsourceオブジェクトで返されます。LINEに表示されるLINE IDは使用しないでください。

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/group/{groupId}/member/{userId} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.get_group_member_profile(<groupId>, <userId>)
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
res, err := bot.GetGroupMemberProfile(<groupId>, <userId>).Do()
if err != nil {
    ...
}
println(res.Displayname)
println(res.PicutureURL)
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->getGroupMemberProfile(<groupId>, <userId>);
# No sample code available
profile = line_bot_api.get_group_member_profile(<group_id>, <user_id>)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.getGroupMemberProfile('<groupId>', '<userId>')
  .then((profile) => {
    console.log(profile.displayName);
    console.log(profile.userId);
    console.log(profile.pictureUrl);
    console.log(profile.statusMessage);
  })
  .catch((err) => {
    // error handling
  });

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
displayName String 表示名
userId String ユーザーID
pictureUrl String プロフィール画像のURL

レスポンスの例

{
    "displayName":"LINE taro",
    "userId":"U4af4980629...",
    "pictureUrl":"https://obs.line-apps.com/..."
}

グループから退出する

グループから退出するAPIです。

HTTPリクエスト

POST https://api.line.me/v2/bot/group/{groupId}/leave

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 説明
groupId グループID。Webhookイベントオブジェクトsourceオブジェクトで返されます。

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/group/{groupId}/leave \
-H 'Authorization: Bearer {channel access token}'
final LineMessagingClient client = LineMessagingClient
        .builder("<channel access token>")
        .build();

final BotApiResponse botApiResponse;
try {
    botApiResponse = client.leaveGroup("<roomId>").get();
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
    return;
}

System.out.println(botApiResponse);
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
if _, err := bot.LeaveGroup(<groupId>).Do(); err != nil {
    ...
}
client = Line::Bot::Client.new { |config|
    config.channel_secret = "<channel secret>"
    config.channel_token = "<channel access token>"
}
response = client.leave_group("<groupId>")
p response.body
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->leaveGroup('<groupId>');
echo $response->getHTTPStatus() . ' ' . $response->getRawBody();
use LINE::Bot::API;

my $bot = LINE::Bot::API->new(
    channel_secret       => "<channel secret>",
    channel_access_token => "<channel access token>",
);

my $res = $bot->leave_group("<groupId>");
unless ($res->is_success) {
    # error handling
    ....
}
from linebot import LineBotApi
from linebot.exceptions import LineBotApiError

line_bot_api = LineBotApi('<channel access token>')

try:
    line_bot_api.leave_group('<group_id>')
except LineBotApiError as e:
    # error handle
    ...
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.leaveGroup('<groupId>')
  .then(() => {
    ...
  })
  .catch((err) => {
    // error handling
  });

レスポンス

ステータスコード200と空のJSONオブジェクトを返します。

レスポンスの例

{}

トークルーム

トークルームメンバーのユーザーIDを取得する

note 注意

この機能は認証済みアカウントまたはプレミアムアカウントのみでご利用いただけます。アカウント種別について詳しくは、LINE for BusinessウェブサイトのLINE Account Connectページをご覧ください。

LINE公式アカウントが参加しているトークルームのメンバーの、ユーザーIDを取得するAPIです。LINE公式アカウントを友だちとして追加していないユーザーや、LINE公式アカウントをブロックしているユーザーのユーザーIDも取得します。

HTTPリクエスト

GET https://api.line.me/v2/bot/room/{roomId}/members/ids

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 必須 説明
roomId 必須 トークルームID。Webhookイベントオブジェクトsourceオブジェクトで返されます。

クエリパラメータ

パラメータ 必須 説明
start 任意 継続トークンの値。レスポンスで返されるJSONオブジェクトのnextプロパティに含まれます。1回のリクエストでユーザーIDをすべて取得できない場合は、このパラメータを指定して残りの配列を取得します。

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/room/{roomId}/members/ids?start={continuationToken} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
        config.channel_token = ENV["<channel token>"]
}
client.get_room_member_ids(<roomId>, <continuationToken>)
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
res, err := bot.GetRoomMemberIDs(<roomId>, <continuationToken>).Do()
if err != nil {
    ...
}
for _, id := range res.MemberIDs {
    println(id)
}
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->getRoomMemberIds('<roomId>', '<continuationToken>');
# No sample code available
member_ids_res = line_bot_api.get_room_member_ids(<room_id>)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.getRoomMemberIds('<roomId>')
  .then((ids) => {
    ids.forEach((id) => console.log(id));
  })
  .catch((err) => {
    // error handling
  });

レスポンス

ステータスコード200と以下のプロパティを含むJSONオブジェクトを返します。

プロパティ タイプ 説明
memberIds 文字列の配列 トークルームメンバーのユーザーIDのリスト。LINEバージョン7.4.x以前を使用しているユーザーは、memberIdsに含まれません。詳しくは、「ユーザーの同意」を参照してください。
最大ユーザー数:100
next String 継続トークン。トークルームメンバーのユーザーIDの、次の配列を取得するために使用します。このプロパティは、前回までのレスポンスのmemberIdsで取得しきれなかったユーザーIDがある場合にのみ返されます。

レスポンスの例

{  
   "memberIds":[  
      "U4af4980629...",
      "U0c229f96c4...",
      "U95afb1d4df..."
   ],
   "next":"jxEWCEEP..."
}

トークルームメンバーのプロフィールを取得する

LINE公式アカウントが参加しているトークルームのメンバーのユーザーIDが既知である場合に、そのメンバーのユーザープロフィールを取得するAPIです。LINE公式アカウントを友だちとして追加していないユーザーや、LINE公式アカウントをブロックしているユーザーのプロフィールも取得します。

HTTPリクエスト

GET https://api.line.me/v2/bot/room/{roomId}/member/{userId}

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 説明
roomId トークルームID。Webhookイベントオブジェクトsourceオブジェクトで返されます。
userId ユーザーID。Webhookイベントオブジェクトsourceオブジェクトで返されます。LINEに表示されるLINE IDは使用しないでください。

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/room/{roomId}/member/{userId} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.get_room_member_profile(<roomId>, <userId>)
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
res, err := bot.GetRoomMemberProfile(<roomId>, <userId>).Do()
if err != nil {
    ...
}
println(res.Displayname)
println(res.PicutureURL)
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->getRoomMemberProfile(<roomId>, <userId>);
# No sample code available
profile = line_bot_api.get_room_member_profile(<room_id>, <user_id>)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.getRoomMemberProfile('<roomId>', '<userId>')
  .then((profile) => {
    console.log(profile.displayName);
    console.log(profile.userId);
    console.log(profile.pictureUrl);
    console.log(profile.statusMessage);
  })
  .catch((err) => {
    // error handling
  });

レスポンス

ステータスコード200と以下の情報を含むJSONオブジェクトを返します。

プロパティ タイプ 説明
displayName String 表示名
userId String ユーザーID
pictureUrl String プロフィール画像のURL

レスポンスの例

{
    "displayName":"LINE taro",
    "userId":"U4af4980629...",
    "pictureUrl":"https://obs.line-apps.com/..."
}

トークルームから退出する

トークルームから退出するAPIです。

HTTPリクエスト

POST https://api.line.me/v2/bot/room/{roomId}/leave

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 説明
roomId トークルームID。Webhookイベントオブジェクトsourceオブジェクトで返されます。

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/room/{roomId}/leave \
-H 'Authorization: Bearer {channel access token}'
final LineMessagingClient client = LineMessagingClient
        .builder("<channel access token>")
        .build();

final BotApiResponse botApiResponse;
try {
    botApiResponse = client.leaveRoom("<roomId>").get();
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
    return;
}

System.out.println(botApiResponse);
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
if _, err := bot.LeaveRoom(<roomId>).Do(); err != nil {
    ...
}
client = Line::Bot::Client.new { |config|
    config.channel_secret = "<channel secret>"
    config.channel_token = "<channel access token>"
}
response = client.leave_room("<roomId>")
p response.body
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->leaveRoom('<roomId>');
echo $response->getHTTPStatus() . ' ' . $response->getRawBody();
use LINE::Bot::API;

my $bot = LINE::Bot::API->new(
    channel_secret       => "<channel secret>",
    channel_access_token => "<channel access token>",
);

my $res = $bot->leave_room("<roomId>");
unless ($res->is_success) {
    # error handling
    ....
}
from linebot import LineBotApi
from linebot.exceptions import LineBotApiError

line_bot_api = LineBotApi('<channel access token>')

try:
    line_bot_api.leave_room('<room_id>')
except LineBotApiError as e:
    # error handle
    ...
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.leaveRoom('<roomId>')
  .then(() => {
    ...
  })
  .catch((err) => {
    // error handling
  });

レスポンス

ステータスコード200と空のJSONオブジェクトを返します。

レスポンスの例

{}

リッチメニュー

note Note

Messaging APIで作成したリッチメニューは、Android版とiOS版のLINE 7.14.0以降でサポートされます。

LINE公式アカウントのトーク画面に表示される、カスタマイズ可能なメニューです。詳しくは、「リッチメニューを使う」を参照してください。

リッチメニューを作成する

リッチメニューを作成するAPIです。

リッチメニューを表示するには、リッチメニューの画像をアップロードし、さらにデフォルトのリッチメニューを設定するかリッチメニューをユーザーとリンクする必要があります。1つのLINE公式アカウントに対して、Messaging APIを使って最大で1000件のリッチメニューを作成できます。

HTTPリクエスト

POST https://api.line.me/v2/bot/richmenu

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}
Content-Type application/json

リクエストボディ

リッチメニューオブジェクトとして表されるリッチメニューを指定します。

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/richmenu \
-H 'Authorization: Bearer {channel access token}' \
-H 'Content-Type: application/json' \
-d \
'{
    "size": {
      "width": 2500,
      "height": 1686
    },
    "selected": false,
    "name": "Nice richmenu",
    "chatBarText": "Tap here",
    "areas": [
      {
        "bounds": {
          "x": 0,
          "y": 0,
          "width": 2500,
          "height": 1686
        },
        "action": {
          "type": "postback",
          "data": "action=buy&itemid=123"
        }
      }
   ]
}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}

rich_menu = {
    <rich menu content>
}
client.create_rich_menu(rich_menu)
richMemu := linebot.RichMenu{ ... }
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
res, err := bot.CreateRichMenu(richMemu).Do()
if err != nil {
    t.Error(err.Error())
}
println(res.RichMenuID)
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$richMenuBuilder = new \LINE\LINEBot\RichMenuBuilder(...)
$response = $bot->createRichMenu($richMenuBuilder);
# No sample code available
rich_menu_to_create = RichMenu(
    size=RichMenuSize(width=2500, height=843),
    selected=False,
    name="Nice richmenu",
    chat_bar_text="Tap here",
    areas=[RichMenuArea(
        bounds=RichMenuBounds(x=0, y=0, width=2500, height=843),
        action=URIAction(label='Go to line.me', uri='https://line.me'))]
)
rich_menu_id = line_bot_api.create_rich_menu(rich_menu=rich_menu_to_create)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

const richmenu = {
  size: {
    width: 2500,
    height: 1686
  },
  // Other rich menu object properties
  // ...
}
};

client.createRichMenu(richmenu)
  .then((richMenuId) => 
  console.log(richMenuId))

レスポンス

ステータスコード200とリッチメニューIDを返します。

レスポンスの例

{
  "richMenuId": "{richMenuId}"
}

リッチメニューの画像をアップロードする

画像をアップロードしてリッチメニューに付加するAPIです。

リッチメニューの画像は以下の要件を満たす必要があります。

  • 画像フォーマット:JPEGまたはPNG
  • 画像サイズ(ピクセル):2500x1686、2500x843、1200x810、1200x405、800x540、800x270
  • 最大ファイルサイズ:1MB

注:リッチメニューに付加された画像を置き換えることはできません。リッチメニューの画像を更新するには、新しいリッチメニューオブジェクトを作成して、新しい画像をアップロードします。

HTTPリクエスト

POST https://api-data.line.me/v2/bot/richmenu/{richMenuId}/content

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}
Content-Type image/jpegまたはimage/png
Content-Length リクエストボディのオクテット(8ビットバイト)での長さ。正の値である必要があります。

パスパラメータ

パラメータ 必須 説明
richMenuId 必須 画像を付加するリッチメニューのID

リクエストの例

curl -v -X POST https://api-data.line.me/v2/bot/richmenu/{richMenuId}/content \
-H "Authorization: Bearer {channel access token}" \
-H "Content-Type: image/jpeg" \
-T image.jpg
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.create_rich_menu_image(<richMenuId>, <file>)
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
if _, err := bot.UploadRichMenuImage(<richMenuId>, <imagePath>).Do(); err != nil {
    ...
}
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$imagePath = '/path/to/image.jpeg';
$contentType = 'image/jpeg';
$response = $bot->uploadRichMenuImage(<richMenuId>, $imagePath, $contentType);
# No sample code available
with open(<file_path>, 'rb') as f:
    line_bot_api.set_rich_menu_image(<rich_menu_id>, <content_type>, f)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.setRichMenuImage('<rich_menu_id>', fs.createReadStream('./example.png'))

レスポンス

ステータスコード200と空のJSONオブジェクトを返します。

レスポンスの例

{}

リッチメニューの画像をダウンロードする

リッチメニューの画像をダウンロードするAPIです。

HTTPリクエスト

GET https://api-data.line.me/v2/bot/richmenu/{richMenuId}/content

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 必須 説明
richMenuId 必須 画像をダウンロードするリッチメニューのID

レスポンス

ステータスコード200とリッチメニュー画像のバイナリデータを返します。リクエストの例に示すように、画像をダウンロードできます。

リクエストの例

curl -v -X GET https://api-data.line.me/v2/bot/richmenu/{richMenuId}/content \
-H 'Authorization: Bearer {channel access token}' \
-o picture.jpg
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.get_rich_menu_image(<richMenuId>)
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
content, err := bot.DownloadRichMenuImage(<richMenuId>).Do()
if err != nil {
    ...
}
defer content.Content.Close()

...
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->downloadRichMenuImage(<richMenuId>);
# No sample code available
content = line_bot_api.get_rich_menu_image(<rich_menu_id>)
with open(file_path, 'wb') as fd:
    for chunk in content.iter_content():
        fd.write(chunk)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.getRichMenuImage('<rich menu id>')
  .then((stream) => {
    stream.on('data', (chunk) => {
      ...
    });
    stream.on('error', (err) => {
      // Error handling
    });
    stream.pipe(...)
  });

リッチメニューのリストを取得する

リッチメニューを作成する」で作成したすべてのリッチメニューを取得するAPIです。

注:Official Account Managerで作成したリッチメニューは取得できません。

HTTPリクエスト

GET https://api.line.me/v2/bot/richmenu/list

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/richmenu/list \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.get_rich_menus
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
res, err := bot.GetRichMenuList().Do()
if err != nil {
    ...
}
for _, richMenu := range res {
    println(richMenu.RichMenuID)
}
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->getRichMenuList();
# No sample code available
from linebot import LineBotApi
from linebot.exceptions import LineBotApiError

rich_menu_list = line_bot_api.get_rich_menu_list()

const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.getRichMenuList()
    .then((richmenus) => {
    ids.forEach((richmenu) => console.log(richmenu));
    })

レスポンス

ステータスコード200リッチメニューレスポンスオブジェクトのリストを返します。

プロパティ タイプ 説明
richmenus Array リッチメニューレスポンスオブジェクトの配列

レスポンスの例

{
  "richmenus": [
    {
      "richMenuId": "{richMenuId}",
      "size": {
        "width": 2500,
        "height": 1686
      },
      "selected": false,
      "areas": [
        {
          "bounds": {
            "x": 0,
            "y": 0,
            "width": 2500,
            "height": 1686
          },
          "action": {
            "type": "postback",
            "data": "action=buy&itemid=123"
          }
        }
      ]
    }
  ]
}

リッチメニューを取得する

IDを指定してリッチメニューを取得するAPIです。

HTTPリクエスト

GET https://api.line.me/v2/bot/richmenu/{richMenuId}

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 必須 説明
richMenuId 必須 アップロードされたリッチメニューのID

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/richmenu/{richMenuId} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.get_rich_menu(<richMenuId>)
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
res, err := bot.GetRichMenu(<richMenuId>).Do()
if err != nil {
    ...
}
println(res.RichMenuID)
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->getRichMenu(<richMenuId>);
# No sample code available
rich_menu = line_bot_api.get_rich_menu(rich_menu_id)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.getRichMenu('<rich_menu_id>')
  .then((richMenu) => {
    console.log(richMenu.size);
    console.log(richMenu.areas[0].bounds);
    })

レスポンス

ステータスコード200と、リッチメニューレスポンスオブジェクトを含むJSONレスポンスが返されます。

レスポンスの例

{
  "richMenuId": "{richMenuId}",
  "size": {
     "width": 2500,
     "height": 1686
   },
   "selected": false,
   "areas": [
     {
       "bounds": {
         "x": 0,
         "y": 0,
         "width": 2500,
         "height": 1686
       },
       "action": {
         "type": "postback",
         "data": "action=buy&itemid=123"
       }
     }
   ]
}

リッチメニューを削除する

リッチメニューを削除するAPIです。

HTTPリクエスト

DELETE https://api.line.me/v2/bot/richmenu/{richMenuId}

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 必須 説明
richMenuId 必須 アップロードされたリッチメニューのID

リクエストの例

curl -v -X DELETE https://api.line.me/v2/bot/richmenu/{richMenuId} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.delete_rich_menu(<richMenuId>)
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
if _, err := bot.DeleteRichMenu(<richMenuId>).Do(); err != nil {
    ...
}
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->deleteRichMenu(<richMenuId>);
# No sample code available
line_bot_api.delete_rich_menu(<rich_menu_id>)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.deleteRichMenu('<rich_menu_id>')

レスポンス

ステータスコード200と空のJSONオブジェクトを返します。

レスポンスの例

{}

デフォルトのリッチメニューを設定する

デフォルトのリッチメニューを設定するAPIです。デフォルトのリッチメニューは、LINE公式アカウントと友だちになっているユーザーのうち、個別にリッチメニューをリンクされていないすべてのユーザーに表示されます。すでにデフォルトのリッチメニューが設定されていた場合は、新しく指定したリッチメニューに置き換えられます。

リッチメニューの表示優先順位は高い順に以下のとおりです。

  1. Messaging APIで設定するユーザー単位のリッチメニュー
  2. Messaging APIで設定するデフォルトのリッチメニュー
  3. LINE Official Account Managerで設定するデフォルトのリッチメニュー

HTTPリクエスト

POST https://api.line.me/v2/bot/user/all/richmenu/{richMenuId}

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 必須 説明
richMenuId 必須 アップロードされたリッチメニューのID

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/user/all/richmenu/{richMenuId} \
-H "Authorization: Bearer {channel access token}"
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.set_default_rich_menu(<richMenuId>)
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
if _, err := bot.SetDefaultRichMenu(<richMenuId>).Do(); err != nil {
    ...
}
// No sample code available
# No sample code available
# No sample code available
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.setDefaultRichMenu('<rich_menu_id>')

レスポンス

ステータスコード200と空のJSONオブジェクトを返します。

レスポンスの例

{}

デフォルトのリッチメニューのIDを取得する

Messaging APIで設定したデフォルトのリッチメニューのIDを取得するAPIです。

HTTPリクエスト

GET https://api.line.me/v2/bot/user/all/richmenu

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/user/all/richmenu \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new { |config|
    config.channel_secret = "<channel secret>"
    config.channel_token = "<channel access token>"
}
p client.get_default_rich_menu
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
res, err := bot.GetDefaultRichMenu().Do()
if err != nil {
    ...
}
println(res.RichMenuID)
// No sample code available
# No sample code available
# No sample code available
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.getDefaultRichMenuId()

レスポンス

ステータスコード200とリッチメニューIDを表すJSONオブジェクトを返します。

レスポンスの例

{
    "richMenuId": "{richMenuId}"
}

デフォルトのリッチメニューを解除する

Messaging APIで設定したデフォルトのリッチメニューを解除するAPIです。

HTTPリクエスト

DELETE https://api.line.me/v2/bot/user/all/richmenu

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

リクエストの例

curl -v -X DELETE https://api.line.me/v2/bot/user/all/richmenu \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.unset_default_rich_menu
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
if _, err := bot.CancelDefaultRichMenu().Do(); err != nil {
    ...
}
// No sample code available
# No sample code available
# No sample code available
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.deleteDefaultRichMenu()

レスポンス

ステータスコード200と空のJSONオブジェクトを返します。

レスポンスの例

{}

リッチメニューとユーザーをリンクするAPIです。複数のリッチメニューを1人のユーザーに同時にリンクすることはできません。ユーザーにすでにリッチメニューがリンクされていた場合は、新しく指定したリッチメニューに置き換えられます。

リッチメニューの表示優先順位は高い順に以下のとおりです。

  1. Messaging APIで設定するユーザー単位のリッチメニュー
  2. Messaging APIで設定するデフォルトのリッチメニュー
  3. LINE Official Account Managerで設定するデフォルトのリッチメニュー

HTTPリクエスト

POST https://api.line.me/v2/bot/user/{userId}/richmenu/{richMenuId}

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 必須 説明
richMenuId 必須 アップロードされたリッチメニューのID
userId 必須 ユーザーID。Webhookイベントオブジェクトsourceオブジェクトで返されます。LINEに表示されるLINE IDは使用しないでください。

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/user/{userId}/richmenu/{richMenuId} \
-H "Authorization: Bearer {channel access token}"
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.link_user_rich_menu(<userId>, <richMenuId>)
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
if _, err := bot.LinkUserRichMenu(<userId>, <richMenuId>).Do(); err != nil {
    ...
}
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->linkRichMenu(<userId>, <richMenuId>);
# No sample code available
line_bot_api.link_rich_menu_to_user(<user_id>, <rich_menu_id>)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.linkRichMenuToUser('<user_id>', '<rich_menu_id>')

レスポンス

ステータスコード200と空のJSONオブジェクトを返します。

レスポンスの例

{}

リッチメニューと複数のユーザーをリンクします。

リッチメニューの表示優先順位は高い順に以下のとおりです。

  1. Messaging APIで設定するユーザー単位のリッチメニュー
  2. Messaging APIで設定するデフォルトのリッチメニュー
  3. LINE Official Accountで設定するデフォルトのリッチメニュー

HTTPリクエスト

POST https://api.line.me/v2/bot/richmenu/bulk/link

リクエストヘッダー

リクエストヘッダー 説明
Content-Type application/json
Authorization Bearer {channel access token}

リクエストボディ

プロパティ タイプ 必須 説明
richMenuId String 必須 アップロードされたリッチメニューのID
userIds Stringの配列 必須 ユーザーIDの配列。Webhookイベントオブジェクトsourceオブジェクトで返されます。LINEに表示されるLINE IDは使用しないでください。
最大ユーザーID数:150

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/richmenu/bulk/link \
-H "Authorization: Bearer {channel access token}" \
-H "Content-Type: application/json" \
-d '{
  "richMenuId":"{richMenuId}",
  "userIds":["{userId1}","{userId2}"]
}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.bulk_link_rich_menus([<userId1>, <userId2>], <richMenuId>)
// No sample code available
// No sample code available
# No sample code available
# No sample code available
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.linkRichMenuToMultipleUsers('rich_menu_id', 
  [
    '<user_id1>',
    '<user_id2>',
    '<user_id3>'
  ],
)

レスポンス

ステータスコード202と空のJSONオブジェクトを返します。

リッチメニューと1人のユーザーをリンクする場合と異なり、このリクエストはバックグラウンドで非同期に処理されます。通常、処理は数秒で完了します。

リクエストの処理が成功したかどうかを検証するには、ユーザーのリッチメニューのIDを取得して、リッチメニューがユーザーにリンクされていることを確認します。

レスポンスの例

{}

ユーザーのリッチメニューのIDを取得する

ユーザーにリンクされたリッチメニューのIDを取得するAPIです。

HTTPリクエスト

GET https://api.line.me/v2/bot/user/{userId}/richmenu

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 必須 説明
userId 必須 ユーザーID。Webhookイベントオブジェクトsourceオブジェクトで返されます。LINEに表示されるLINE IDは使用しないでください。

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/user/{userId}/richmenu \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.get_user_rich_menu(<userId>)
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
res, err := bot.GetUserRichMenu(<userId>).Do()
if err != nil {
    ...
}
println(res.RichMenuID)
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->getRichMenuId(<userId>);
# No sample code available
rich_menu_id = line_bot_api.get_rich_menu_id_of_user(<user_id>)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.getRichMenuIdOfUser('<user_id>')
  .then((richMenuId) => {
    console.log(richMenuId);
    })

レスポンス

ステータスコード200とリッチメニューIDを表すJSONオブジェクトを返します。

レスポンスの例

{
    "richMenuId": "{richMenuId}"
}

リッチメニューとユーザーのリンクを解除するAPIです。

HTTPリクエスト

DELETE https://api.line.me/v2/bot/user/{userId}/richmenu

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 必須 説明
userId 必須 ユーザーID。Webhookイベントオブジェクトsourceオブジェクトで返されます。LINEに表示されるLINE IDは使用しないでください。

リクエストの例

curl -v -X DELETE https://api.line.me/v2/bot/user/{userId}/richmenu \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.unlink_user_rich_menu(<userId>)
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
if _, err := bot.UnlinkUserRichMenu(<userId>).Do(); err != nil {
    ...
}
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);s
$bot->unlinkRichMenu(<userId>);
# No sample code available
line_bot_api.unlink_rich_menu_from_user(<user_id>)
line_bot_api.unlink_rich_menu_from_user(<user_id>)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.unlinkRichMenuFromUser('<user_id>', '<rich_menu_id>')

レスポンス

ステータスコード200と空のJSONオブジェクトを返します。

レスポンスの例

{}

複数のユーザーのリッチメニューのリンクを解除します。

HTTPリクエスト

POST https://api.line.me/v2/bot/richmenu/bulk/unlink

リクエストヘッダー

リクエストヘッダー 説明
Content-Type application/json
Authorization Bearer {channel access token}

リクエストボディ

プロパティ タイプ 必須 説明
userIds Stringの配列 必須 ユーザーIDの配列。Webhookイベントオブジェクトsourceオブジェクトで返されます。LINEに表示されるLINE IDは使用しないでください。
最大ユーザーID数:150

リクエストの例

curl -v -X POST https://api.line.me/v2/bot/richmenu/bulk/unlink \
-H "Authorization: Bearer {channel access token}" \
-H "Content-Type: application/json" \
-d '{
  "userIds":["{userId1}","{userId2}"]
}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.bulk_unlink_rich_menus([<userId1>, <userId2>])
// No sample code available
// No sample code available
# No sample code available
# No sample code available
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.unlinkRichMenusFromMultipleUsers(['<user_id1>', '<user_id2>', '<user_id3>'])

レスポンス

ステータスコード202と空のJSONオブジェクトを返します。

リッチメニューと1人のユーザーのリンクを解除する場合と異なり、このリクエストはバックグラウンドで非同期に処理されます。通常、処理は数秒で完了します。

リクエストの処理が成功したかどうかを検証するには、ユーザーのリッチメニューのIDを取得して、リンクを解除したはずのリッチメニューがユーザーにリンクされていないことを確認します。

レスポンスの例

{}

フォロワーのIDを取得する

注:この機能は認証済みアカウントまたはプレミアムアカウントのみでご利用いただけます。アカウント種別について詳しくは、LINE for Businessウェブサイトの「LINE Account Connect」ページをご覧ください。

公式アカウントを友だち追加したユーザー(フォロワー)のIDを取得するAPIです。

HTTPリクエスト

GET https://api.line.me/v2/bot/followers/ids

リクエストヘッダー

リクエストヘッダー 説明
Content-Type application/json
Authorization Bearer {channel access token}

クエリパラメータ

パラメータ 必須 説明
start 任意 継続トークンの値。レスポンスで返されるJSONオブジェクトのnextプロパティに含まれます。1回のリクエストでユーザーIDをすべて取得できない場合は、このパラメータを指定して残りの配列を取得します。

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/followers/ids?start={continuationToken} \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

レスポンス

ステータスコード200と以下のプロパティを含むJSONオブジェクトを返します。

プロパティ タイプ 説明
userIds 文字列の配列 公式アカウントを友だち追加したユーザーのユーザーIDのリスト。LINEバージョン7.4.x以前を使用しているユーザーは、userIdsに含まれません。詳しくは、ユーザーの同意を参照してください。
最大ユーザー数:300
next String 継続トークン。ユーザーIDの、次の配列を取得するために使用します。このプロパティは、前回までのレスポンスのuserIdsで取得しきれなかったユーザーIDがある場合にのみ返されます。userIdsに含まれるユーザーIDの数は、nextプロパティが返される場合でも必ず300件になるとは限りません。

レスポンスの例

{  
   "userIds":[  
      "U4af4980629...",
      "U0c229f96c4...",
      "U95afb1d4df..."
   ],
   "next":"yANU9IA..."
}

アカウント連携

アカウント連携で使用する連携トークンを発行するAPIです。

HTTPリクエスト

POST https://api.line.me/v2/bot/user/{userId}/linkToken

リクエストヘッダー

リクエストヘッダー 説明
Authorization Bearer {channel access token}

パスパラメータ

パラメータ 必須 説明
userId 必須 連携対象のLINEアカウントのユーザーID。アカウント連携イベントオブジェクトのsourceオブジェクトで返されます。LINEに表示されるLINE IDは使用しないでください。

リクエストの例

curl -X POST https://api.line.me/v2/bot/user/{userId}/linkToken \
-H 'Authorization: Bearer {channel access token}'
// No sample code available
client = Line::Bot::Client.new{ |config|
    config.channel_secret = ENV["<channel secret>"]
    config.channel_token = ENV["<channel token>"]
}
client.create_link_token(<userId>)
bot, err := linebot.New(<channel secret>, <channel token>)
if err != nil {
    ...
}
res, err := bot.IssueLinkToken(<userId>).Do()
if err != nil {
    ...
}
println(res.LinkToken)
$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('<channel access token>');
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => '<channel secret>']);
$response = $bot->createLinkToken(<userId>);
# No sample code available
link_token_response = line_bot_api.issue_link_token(<user_id>)
const line = require('@line/bot-sdk');

const client = new line.Client({
  channelAccessToken: '<channel access token>'
});

client.getLinkToken('<user_id>')

レスポンス

ステータスコード200と連携トークンを返します。連携トークンの有効期間は10分で、1回のみ使用できます。

注:有効期間は予告なく変わる可能性があります。

レスポンスの例

{
  "linkToken": "NMZTNuVrPTqlr2IF8Bnymkb7rXfYv5EY"
}

メッセージ共通プロパティ

以下のプロパティはすべてのメッセージオブジェクトに指定できます。

クイックリプライ

クイックリプライ機能で使用するプロパティです。Android版とiOS版のLINE 8.11.0以降でサポートされます。詳しくは、「クイックリプライを使う」を参照してください。

プロパティ タイプ 必須 説明
quickReply Object 任意 itemsオブジェクト

複数のメッセージオブジェクトを受信したユーザーには、最後のメッセージオブジェクトのquickReplyプロパティが表示されます。

itemsオブジェクト

クイックリプライボタンのコンテナです。

プロパティ タイプ 必須 説明
items Objectの配列 必須 クイックリプライボタンオブジェクト。最大オブジェクト数:13
クイックリプライボタンオブジェクト

ボタン形式で表示される、クイックリプライの選択肢です。

プロパティ タイプ 必須 説明
type String 必須 action
imageUrl String 任意 ボタンの先頭に表示するアイコンのURL
  • 最大文字数:1000
  • URLスキーム:https
  • 画像フォーマット:PNG
  • アスペクト比:1:1
  • 最大データサイズ:1MB
画像サイズに制限はありません。
actionプロパティに指定するアクションがカメラアクションカメラロールアクション、または位置情報アクションで、imageUrlプロパティが未指定の場合、デフォルトのアイコンが表示されます。
action Object 必須 タップされたときのアクション。アクションオブジェクトを指定します。指定できるアクションの種類は以下のとおりです。

クイックリプライボタンが設定されたメッセージを未対応のLINEで受信すると、メッセージ本体のみが表示されます。

itemsオブジェクトの例

"quickReply": {
  "items": [
    {
      "type": "action",
      "action": {
        "type": "cameraRoll",
        "label": "Send photo"
      }
    },
    {
      "type": "action",
      "action": {
        "type": "camera",
        "label": "Open camera"
      }
    }
  ]
}

テキストメッセージ

プロパティ タイプ 必須 説明
type String 必須 text
text String 必須 メッセージのテキスト。以下の絵文字を含めることができます。 最大文字数:2000

テキストメッセージの例

{
    "type": "text",
    "text": "Hello, world"
}

絵文字を含むテキストメッセージの例

{
    "type": "text",
    "text": "\uDBC0\uDC84 LINE emoji"
}

スタンプメッセージ

プロパティ タイプ 必須 説明
type String 必須 sticker
packageId String 必須 スタンプセットのパッケージID。パッケージIDについては、スタンプリストを参照してください。
stickerId String 必須 スタンプID。Messaging APIで送信できるスタンプのスタンプIDについては、スタンプリストを参照してください。

スタンプメッセージの例

{
  "type": "sticker",
  "packageId": "1",
  "stickerId": "1"
}

画像メッセージ

プロパティ タイプ 必須 説明
type String 必須 image
originalContentUrl String 必須 画像のURL(最大文字数:1000)
HTTPS(TLS 1.2以降)
JPEG
最大画像サイズ:4096×4096
最大ファイルサイズ:1MB
previewImageUrl String 必須 プレビュー画像のURL(最大文字数:1000)
HTTPS(TLS 1.2以降)
JPEG
最大画像サイズ:240×240
最大ファイルサイズ:1MB

画像メッセージの例

{
    "type": "image",
    "originalContentUrl": "https://example.com/original.jpg",
    "previewImageUrl": "https://example.com/preview.jpg"
}

動画メッセージ

プロパティ タイプ 必須 説明
type String 必須 video
originalContentUrl String 必須 動画ファイルのURL(最大文字数:1000)
HTTPS(TLS 1.2以降)
mp4
最大長:1分
最大ファイルサイズ:10MB

一定以上に縦長・横長の動画を送信した場合、一部の環境では動画の一部が欠けて表示される場合があります。
previewImageUrl String 必須 プレビュー画像のURL(最大文字数:1000)
HTTPS(TLS 1.2以降)
JPEG
最大画像サイズ:240×240
最大ファイルサイズ:1MB

動画メッセージの例

{
    "type": "video",
    "originalContentUrl": "https://example.com/original.mp4",
    "previewImageUrl": "https://example.com/preview.jpg"
}

音声メッセージ

プロパティ タイプ 必須 説明
type String 必須 audio
originalContentUrl String 必須 音声ファイルのURL(最大文字数:1000)
HTTPS(TLS 1.2以降)
m4a
最大長:1分
最大ファイルサイズ:10MB
duration Number 必須 音声ファイルの長さ(ミリ秒)

音声メッセージの例

{
    "type": "audio",
    "originalContentUrl": "https://example.com/original.m4a",
    "duration": 60000
}

位置情報メッセージ

プロパティ タイプ 必須 説明
type String 必須 location
title String 必須 タイトル
最大文字数:100
address String 必須 住所
最大文字数:100
latitude Decimal 必須 緯度
longitude Decimal 必須 経度

位置情報メッセージの例

{
    "type": "location",
    "title": "my location",
    "address": "〒150-0002 東京都渋谷区渋谷2丁目21−1",
    "latitude": 35.65910807942215,
    "longitude": 139.70372892916203
}

イメージマップメッセージ

イメージマップメッセージは、複数のタップ領域を設定した画像を送信できるメッセージです。画像全体に1つのタップ領域を割り当てることも、画像を区切って複数のタップ領域を設定することもできます。

また、画像の上で動画を再生したり、動画再生後にリンク先を設定したラベルを表示したりできます。

プロパティ タイプ 必須 説明
type String 必須 imagemap
baseUrl String 必須 画像のベースURL
最大文字数:1000
HTTPS(TLS 1.2以降)
イメージマップメッセージで使える画像について詳しくは、「画像の設定方法」を参照してください。
altText String 必須 代替テキスト
最大文字数:400
baseSize.width Number 必須 基本画像の幅(px単位)。1040を指定します。
baseSize.height Number 必須 基本画像の幅を1040pxとした場合の高さ
video.originalContentUrl String ※1 動画ファイルのURL(最大文字数:1000)
HTTPS(TLS 1.2以降)
mp4
最大長:1分
最大ファイルサイズ:10MB

注:一定以上に縦長・横長の動画を送信した場合、一部の環境では動画の一部が欠けて表示される場合があります。
video.previewImageUrl String ※1 プレビュー画像のURL(最大文字数:1000)
HTTPS(TLS 1.2以降)
JPEG
最大画像サイズ:240×240
最大ファイルサイズ:1MB
video.area.x Number ※1 イメージマップ領域の左端を基準とした動画領域の位置(横方向の相対位置)。0以上の値を設定してください。
video.area.y Number ※1 イメージマップ領域の上端を基準とした動画領域の位置(縦方向の相対位置)。0以上の値を設定してください。
video.area.width Number ※1 動画領域の幅
video.area.height Number ※1 動画領域の高さ
video.externalLink.linkUri String ※2 ウェブページのURL。動画再生後に表示されるラベルをタップしたときに呼び出されます。
最大文字数:1000
使用できるスキームは、httphttpsline、およびtelです。 LINE URLスキームについて詳しくは、「LINE URLスキームを使う」を参照してください。
video.externalLink.label String ※2 ラベル。動画の再生が終了した後に表示されます。
最大文字数:30
actions イメージマップアクションオブジェクトの配列 必須 画像がタップされたときのアクション
最大件数:50

※1 イメージマップで動画を再生する場合は必須です。
※2 イメージマップで動画を再生し、動画再生後にラベルを表示する場合は必須です。

画像の設定方法

イメージマップメッセージで使用する画像は、以下の要件を満たす必要があります。

  • 画像フォーマット:JPEGまたはPNG
  • 画像の幅:240px、300px、460px、700px、および1040px
  • 最大ファイルサイズ:1MB

baseUrl/{image width}」というURL形式で、5つの異なるサイズの画像にアクセスできるようにしてください。LINEはユーザーのデバイスに応じて、適切な解像度の画像を取得します。

たとえば、画像のベースURLが「https://example.com/images/cats」だった場合、幅が700pxの画像のURLは「https://example.com/images/cats/700」になります。すべての画像のURLにアクセスして、画像が表示されることを確認してください。

画像の幅 URLの例
240px https://example.com/bot/images/rm001/240
300px https://example.com/bot/images/rm001/300
460px https://example.com/bot/images/rm001/460
700px https://example.com/bot/images/rm001/700
1040px https://example.com/bot/images/rm001/1040
note 注意

画像のURLには拡張子を含めないでください。「https://example.com/bot/images/rm001/700.png」のように、URLに拡張子が含まれている場合、イメージマップメッセージでは画像が表示されません。

イメージマップアクションオブジェクト

イメージマップに設定するアクションとタップ領域を表すオブジェクトです。

領域がタップされると、uriの場合は指定するURIにユーザーがリダイレクトされ、messageの場合は指定するメッセージが送信されます。

2つのタップ領域を持つイメージマップメッセージの例

{
  "type": "imagemap",
  "baseUrl": "https://example.com/bot/images/rm001",
  "altText": "This is an imagemap",
  "baseSize": {
      "width": 1040,
      "height": 1040
  },
  "video": {
      "originalContentUrl": "https://example.com/video.mp4",
      "previewImageUrl": "https://example.com/video_preview.jpg",
      "area": {
          "x": 0,
          "y": 0,
          "width": 1040,
          "height": 585
      },
      "externalLink": {
          "linkUri": "https://example.com/see_more.html",
          "label": "See More"
      }
  },
  "actions": [
      {
          "type": "uri",
          "linkUri": "https://example.com/",
          "area": {
              "x": 0,
              "y": 586,
              "width": 520,
              "height": 454
          }
      },
      {
          "type": "message",
          "text": "Hello",
          "area": {
              "x": 520,
              "y": 586,
              "width": 520,
              "height": 454
          }
      }
  ]
}
イメージマップURIアクションオブジェクト
プロパティ タイプ 必須 説明
type String 必須 uri
label String 任意 アクションのラベル。ユーザーデバイスのアクセシビリティ機能が有効な場合に読み上げられます。
最大文字数:50
iOS版LINE 8.2.0以降でサポートされます。
linkUri String 必須 ウェブページのURL
最大文字数:1000
使用できるスキームは、httphttpsline、およびtelです。 LINE URLスキームについて詳しくは、「LINE URLスキームを使う」を参照してください。
area イメージマップ領域オブジェクト 必須 タップ領域の定義

イメージマップURIアクションオブジェクトの例

{  
   "type":"uri",
   "label":"https://example.com/",
   "linkUri":"https://example.com/",
   "area":{  
      "x":0,
      "y":0,
      "width":520,
      "height":1040
   }
}
イメージマップメッセージアクションオブジェクト
プロパティ タイプ 必須 説明
type String 必須 message
label String 任意 アクションのラベル。ユーザーデバイスのアクセシビリティ機能が有効な場合に読み上げられます。
最大文字数:50
iOS版LINE 8.2.0以降でサポートされます。
text String 必須 送信するメッセージ
最大文字数:400
iOS版とAndroid版のLINEでのみサポートされます。
area イメージマップ領域オブジェクト 必須 タップ領域の定義

イメージマップメッセージアクションオブジェクトの例

{  
   "type":"message",
   "label":"hello",
   "text":"hello",
   "area":{  
      "x":520,
      "y":0,
      "width":520,
      "height":1040
   }
}
イメージマップ領域オブジェクト

タップ領域のサイズを表すオブジェクトです。画像の左上が座標の原点です。baseSize.widthプロパティとbaseSize.heightプロパティに基づいて指定します。

プロパティ タイプ 必須 説明
x Number 必須 領域の左端を基準としたタップ領域の位置(横方向の相対位置)。0以上の値を設定してください。
y Number 必須 領域の上端を基準としたタップ領域の位置(縦方向の相対位置)。0以上の値を設定してください。
width Number 必須 タップ領域の幅
height Number 必須 タップ領域の高さ

イメージマップ領域オブジェクトの例

{
   "x":520,
   "y":0,
   "width":520,
   "height":1040
}

テンプレートメッセージ

note 注意

テンプレートメッセージはiOS版とAndroid版のLINE 6.7.0以降で対応しています。

テンプレートメッセージは、あらかじめレイアウトが定義されたテンプレートをカスタマイズして構築するメッセージです。詳しくは、「テンプレートメッセージ」を参照してください。

以下のタイプのテンプレートを利用できます。

テンプレートメッセージオブジェクトの共通プロパティ

以下のプロパティは、すべてのテンプレートメッセージオブジェクトで共通です。

プロパティ タイプ 必須 説明
type String 必須 template
altText String 必須 代替テキスト
最大文字数:400
template Object 必須 ボタン確認カルーセル、または画像カルーセルオブジェクト

ボタンテンプレート

画像、タイトル、テキストに加えて、複数のアクションボタンが含まれたテンプレートです。

プロパティ タイプ 必須 説明
type String 必須 buttons
thumbnailImageUrl String 任意 画像URL(最大文字数:1000)
HTTPS(TLS 1.2以降)
JPEGまたはPNG
最大横幅サイズ:1024px
最大ファイルサイズ:1MB
imageAspectRatio String 任意 画像のアスペクト比。以下のいずれかの値を指定します。
  • rectangle: 1.51:1
  • square: 1:1
デフォルト値はrectangleです。
imageSize String 任意 画像の表示形式。以下のいずれかの値を指定します。
  • cover:画像領域全体に画像を表示します。画像領域に収まらない部分は切り詰められます。
  • contain:画像領域に画像全体を表示します。縦長の画像では左右に、横長の画像では上下に余白が表示されます。
デフォルト値はcoverです。
imageBackgroundColor String 任意 画像の背景色。RGB値で設定します。デフォルト値は#FFFFFF(白)です。
title String 任意 タイトル
最大文字数:40
text String 必須 メッセージテキスト
画像もタイトルも指定しない場合の最大文字数:160
画像またはタイトルを指定する場合の最大文字数:60
defaultAction アクションオブジェクト 任意 画像、タイトル、テキストの領域全体に対して設定できる、タップされたときのアクション
actions アクションオブジェクトの配列 必須 タップされたときのアクション
最大件数:4

ボタンテンプレートメッセージの例

{
  "type": "template",
  "altText": "This is a buttons template",
  "template": {
      "type": "buttons",
      "thumbnailImageUrl": "https://example.com/bot/images/image.jpg",
      "imageAspectRatio": "rectangle",
      "imageSize": "cover",
      "imageBackgroundColor": "#FFFFFF",
      "title": "Menu",
      "text": "Please select",
      "defaultAction": {
          "type": "uri",
          "label": "View detail",
          "uri": "http://example.com/page/123"
      },
      "actions": [
          {
            "type": "postback",
            "label": "Buy",
            "data": "action=buy&itemid=123"
          },
          {
            "type": "postback",
            "label": "Add to cart",
            "data": "action=add&itemid=123"
          },
          {
            "type": "uri",
            "label": "View detail",
            "uri": "http://example.com/page/123"
          }
      ]
  }
}

確認テンプレート

2つのアクションボタンを表示するテンプレートです。

プロパティ タイプ 必須 説明
type String 必須 confirm
text String 必須 メッセージのテキスト
最大文字数:240
actions アクションオブジェクトの配列 必須 タップされたときのアクション
2つのボタンに1つずつアクションを設定します。

確認テンプレートメッセージの例

{
  "type": "template",
  "altText": "this is a confirm template",
  "template": {
      "type": "confirm",
      "text": "Are you sure?",
      "actions": [
          {
            "type": "message",
            "label": "Yes",
            "text": "yes"
          },
          {
            "type": "message",
            "label": "No",
            "text": "no"
          }
      ]
  }
}

複数のカラムを表示するテンプレートです。カラムは横にスクロールして順番に表示できます。

プロパティ タイプ 必須 説明
type String 必須 carousel
columns カラムオブジェクトの配列 必須 カラムの配列
最大カラム数:10
imageAspectRatio String 任意 画像のアスペクト比。以下のいずれかの値を指定します。
  • rectangle: 1.51:1
  • square: 1:1
すべてのカラムに適用されます。デフォルト値はrectangleです。
imageSize String 任意 画像の表示形式。以下のいずれかの値を指定します。
  • cover:画像領域全体に画像を表示します。画像領域に収まらない部分は切り詰められます。
  • contain:画像領域に画像全体を表示します。縦長の画像では左右に、横長の画像では上下に余白が表示されます。
すべてのカラムに適用されます。デフォルト値はcoverです。
プロパティ タイプ 必須 説明
thumbnailImageUrl String 任意 画像URL(最大文字数:1000)
HTTPS(TLS 1.2以降)
JPEGまたはPNG
縦横比:1:1.51
最大横幅サイズ:1024px
最大ファイルサイズ:1MB
imageBackgroundColor String 任意 画像の背景色。RGB値で設定します。デフォルト値は#FFFFFF(白)です。
title String 任意 タイトル
最大文字数:40
text String 必須 メッセージテキスト
画像もタイトルも指定しない場合の最大文字数:120
画像またはタイトルを指定する場合の最大文字数:60
defaultAction アクションオブジェクト 任意 画像、タイトル、テキストの領域全体に対して設定できる、タップされたときのアクション
actions アクションオブジェクトの配列 必須 タップされたときのアクション
最大件数:3

カルーセルテンプレートメッセージの例

{
  "type": "template",
  "altText": "this is a carousel template",
  "template": {
      "type": "carousel",
      "columns": [
          {
            "thumbnailImageUrl": "https://example.com/bot/images/item1.jpg",
            "imageBackgroundColor": "#FFFFFF",
            "title": "this is menu",
            "text": "description",
            "defaultAction": {
                "type": "uri",
                "label": "View detail",
                "uri": "http://example.com/page/123"
            },
            "actions": [
                {
                    "type": "postback",
                    "label": "Buy",
                    "data": "action=buy&itemid=111"
                },
                {
                    "type": "postback",
                    "label": "Add to cart",
                    "data": "action=add&itemid=111"
                },
                {
                    "type": "uri",
                    "label": "View detail",
                    "uri": "http://example.com/page/111"
                }
            ]
          },
          {
            "thumbnailImageUrl": "https://example.com/bot/images/item2.jpg",
            "imageBackgroundColor": "#000000",
            "title": "this is menu",
            "text": "description",
            "defaultAction": {
                "type": "uri",
                "label": "View detail",
                "uri": "http://example.com/page/222"
            },
            "actions": [
                {
                    "type": "postback",
                    "label": "Buy",
                    "data": "action=buy&itemid=222"
                },
                {
                    "type": "postback",
                    "label": "Add to cart",
                    "data": "action=add&itemid=222"
                },
                {
                    "type": "uri",
                    "label": "View detail",
                    "uri": "http://example.com/page/222"
                }
            ]
          }
      ],
      "imageAspectRatio": "rectangle",
      "imageSize": "cover"
  }
}

複数の画像を表示するテンプレートです。画像は横にスクロールして順番に表示できます。

プロパティ タイプ 必須 説明
type String 必須 image_carousel
columns カラムオブジェクトの配列 必須 カラムの配列
最大カラム数:10
プロパティ タイプ 必須 説明
imageUrl String 必須 画像URL(最大文字数:1000)
HTTPS(TLS 1.2以降)
JPEGまたはPNG
縦横比:1:1
最大横幅サイズ:1024px
最大ファイルサイズ:1MB
action アクションオブジェクト 必須 画像がタップされたときのアクション

画像カルーセルテンプレートメッセージの例

{
  "type": "template",
  "altText": "this is a image carousel template",
  "template": {
      "type": "image_carousel",
      "columns": [
          {
            "imageUrl": "https://example.com/bot/images/item1.jpg",
            "action": {
              "type": "postback",
              "label": "Buy",
              "data": "action=buy&itemid=111"
            }
          },
          {
            "imageUrl": "https://example.com/bot/images/item2.jpg",
            "action": {
              "type": "message",
              "label": "Yes",
              "text": "yes"
            }
          },
          {
            "imageUrl": "https://example.com/bot/images/item3.jpg",
            "action": {
              "type": "uri",
              "label": "View detail",
              "uri": "http://example.com/page/222"
            }
          }
      ]
  }
}

Flex Message

Flex Messageは、CSS Flexible Box(CSS Flexbox)の基礎知識を使って、レイアウトを自由にカスタマイズできるメッセージです。Flex Messageの概要については、『Messaging APIドキュメント』の「Flex Messageを使う」を参照してください。

プロパティ タイプ 必須 説明
type String 必須 flex
altText String 必須 代替テキスト
最大文字数:400
contents Object 必須 Flex Messageのコンテナ

コンテナ

コンテナは、Flex Messageの最上位の構造です。以下のタイプのコンテナを利用できます。

コンテナのJSONデータのサンプルや用途については、『Messaging APIドキュメント』の「Flex Messageの要素」を参照してください。

Flex Messageの例

{  
  "type": "flex",
  "altText": "this is a flex message",
  "contents": {
    "type": "bubble",
    "body": {
      "type": "box",
      "layout": "vertical",
      "contents": [
        {
          "type": "text",
          "text": "hello"
        },
        {
          "type": "text",
          "text": "world"
        }
      ]
    }
  }
}
バブル

1つのメッセージバブルを構成するコンテナです。ヘッダー、ヒーロー、ボディ、およびフッターの4つのブロックを含めることができます。各ブロックの用途について詳しくは、『Messaging APIドキュメント』の「ブロック」を参照してください。

バブルを定義するJSONデータの最大サイズは、10KBです。

プロパティ タイプ 必須 説明
type String 必須 bubble
size String 任意 バブルの大きさ。nanomicrokilomegagigaのいずれかの値を指定できます。デフォルト値はmegaです。
direction String 任意 テキストの書字方向と、水平ボックス内でコンポーネントを配置する向き。以下のいずれかの値を指定します。
  • ltr:テキストは左横書き、コンポーネントは左から右に配置
  • rtl:テキストは右横書き、コンポーネントは右から左に配置
デフォルト値はltrです。
header Object 任意 ヘッダー。ボックスを指定します。
hero Object 任意 ヒーロー。ボックスまたは画像を指定します。
body Object 任意 ボディ。ボックスを指定します。
footer Object 任意 フッター。ボックスを指定します。
styles Object 任意 各ブロックのスタイル。バブルスタイルを指定します。
action Object 任意 バブルがタップされたときのアクション。アクションオブジェクトを指定します。このプロパティをサポートするLINEのバージョンは以下のとおりです。
  • iOS版とAndroid版のLINE 8.11.0以降

バブルの例

{
  "type": "bubble",
  "header": {
    "type": "box",
    "layout": "vertical",
    "contents": [
      {
        "type": "text",
        "text": "Header text"
      }
    ]
  },
  "hero": {
    "type": "image",
    "url": "https://example.com/flex/images/image.jpg"
  },
  "body": {
    "type": "box",
    "layout": "vertical",
    "contents": [
      {
        "type": "text",
        "text": "Body text"
      }
    ]
  },
  "footer": {
    "type": "box",
    "layout": "vertical",
    "contents": [
      {
        "type": "text",
        "text": "Footer text"
      }
    ]
  },
  "styles": {
    "comment": "See the example of a bubble style object"
  }
}
ブロックのスタイルを定義するオブジェクト

バブル内のブロックのスタイルは、以下の2つのオブジェクトを使って定義します。

バブルスタイル
プロパティ タイプ 必須 説明
header Object 任意 ヘッダーのスタイル。ブロックスタイルを指定します。
hero Object 任意 ヒーローのスタイル。ブロックスタイルを指定します。
body Object 任意 ボディのスタイル。ブロックスタイルを指定します。
footer Object 任意 フッターのスタイル。ブロックスタイルを指定します。
ブロックスタイル
プロパティ タイプ 必須 説明
backgroundColor String 任意 ブロックの背景色。16進数カラーコードで設定します。
separator Boolean 任意 ブロックの上にセパレータを配置する場合はtrueを指定します。デフォルト値はfalseです。
separatorColor String 任意 セパレータの色。16進数カラーコードで設定します。
note 注意

先頭のブロックの上にはセパレータを配置できません。

バブルスタイルとブロックスタイルの例

  "styles": {
    "header": {
      "backgroundColor": "#00ffff"
    },
    "hero": {
      "separator": true,
      "separatorColor": "#000000"
    },
    "footer": {
      "backgroundColor": "#00ffff",
      "separator": true,
      "separatorColor": "#000000"
    }
  }

カルーセルは、子要素として1つ以上のバブルを持つコンテナです。カルーセル内のバブルは、横にスクロールして閲覧できます。

カルーセルを定義するJSONデータの最大サイズは、50KBです。

プロパティ タイプ 必須 説明
type String 必須 carousel
contents Objectの配列 必須 このカルーセル内のバブル。最大バブル数:10
note バブルの幅

1つのカルーセルに、異なる幅(sizeプロパティ)のバブルを含めることはできません。バブルの幅は、カルーセルごとに揃えてください。

tip バブルの高さ

カルーセルの中で最大の高さのバブルと一致するように、各バブルのボディが伸長します。ただし、ボディがないバブルの大きさは変わりません。

コンポーネント

コンポーネントは、ブロックを構成する要素です。以下のタイプのコンポーネントを利用できます。

各コンポーネントのJSONデータのサンプルや用途については、『Messaging APIドキュメント』の「Flex Messageの要素」と「Flex Messageのレイアウト」を参照してください。

カルーセルの例

{
  "type": "carousel",
  "contents": [
    {
      "type": "bubble",
      "body": {
        "type": "box",
        "layout": "vertical",
        "contents": [
          {
            "type": "text",
            "text": "First bubble"
          }
        ]
      }
    },
    {
      "type": "bubble",
      "body": {
        "type": "box",
        "layout": "vertical",
        "contents": [
          {
            "type": "text",
            "text": "Second bubble"
          }
        ]
      }
    }
  ]
}
ボックス

子要素のレイアウトを定義するコンポーネントです。ボックスにボックスを含めることもできます。

プロパティ タイプ 必須 説明
type String 必須 box
layout String 必須 このボックス内のコンポーネントを配置する向き。詳しくは、『Messaging APIドキュメント』の「コンポーネントを配置する向き」を参照してください。
contents Objectの配列 必須 このボックス内のコンポーネント。以下のコンポーネントを指定できます。 なお、配列に指定した順に描画されます。
backgroundColor String 任意 ボックスの背景色。RGBカラーに加えて、アルファチャネル(透明度)も設定できます。16進数カラーコードで設定します。(例:#RRGGBBAA)デフォルト値は#00000000です。
borderColor String 任意 ボックスの境界線の色。16進数カラーコードで設定します。
borderWidth String 任意 ボックスの境界線の太さ。ピクセルまたはnonelightnormalmediumsemi-boldboldのいずれかの値を指定できます。noneでは、境界線は描画されず、それ以外は列挙した順に太くなります。
cornerRadius String 任意 ボックスの境界線の角を丸くするときの半径。ピクセル、またはnonexssmmdlgxlxxlのいずれかの値を指定できます。noneでは、角は丸くならず、それ以外は列挙した順に半径が大きくなります。デフォルト値はnoneです。
width String 任意 ボックスの幅。詳しくは、『Messaging APIドキュメント』の「ボックスの幅」を参照してください。
height String 任意 ボックスの高さ。詳しくは、『Messaging APIドキュメント』の「ボックスの高さ」を参照してください。
flex Number 任意 親要素内での、このコンポーネントの幅または高さの比率。詳しくは、『Messaging APIドキュメント』の「コンポーネントの幅と高さ」を参照してください。
spacing String 任意 このボックス内のコンポーネント間の最小スペース。デフォルト値はnoneです。詳しくは、『Messaging APIドキュメント』の「ボックスのspacingプロパティ」を参照してください。
margin String 任意 親要素内での、このコンポーネントと前のコンポーネントの間の最小スペース。詳しくは、『Messaging APIドキュメント』の「コンポーネントのmarginプロパティ」を参照してください。
paddingAll String 任意 このボックスの境界線と、子要素の間の余白。詳しくは、『Messaging APIドキュメント』の「ボックスのパディング」を参照してください。
paddingTop String 任意 このボックスの上端の境界線と、子要素の上端の間の余白。詳しくは、『Messaging APIドキュメント』の「ボックスのパディング」を参照してください。
paddingBottom String 任意 このボックスの下端の境界線と、子要素の下端の間の余白。詳しくは、『Messaging APIドキュメント』の「ボックスのパディング」を参照してください。
paddingStart String 任意 このボックスの左端の境界線と、子要素の左端の間の余白。詳しくは、『Messaging APIドキュメント』の「ボックスのパディング」を参照してください。
paddingEnd String 任意 このボックスの右端の境界線と、子要素の右端の間の余白。詳しくは、『Messaging APIドキュメント』の「ボックスのパディング」を参照してください。
position String 任意 このボックスを配置する際の基準位置。以下のいずれかの値を指定します。
  • relative:直前のボックスを基準にします。
  • absolute:親要素の左上を基準にします。
デフォルト値はrelativeです。詳しくは、『Messaging APIドキュメント』の「オフセット」を参照してください。
offsetTop String 任意 オフセット。詳しくは、『Messaging APIドキュメント』の「オフセット」を参照してください。
offsetBottom String 任意 オフセット。詳しくは、『Messaging APIドキュメント』の「オフセット」を参照してください。
offsetStart String 任意 オフセット。詳しくは、『Messaging APIドキュメント』の「オフセット」を参照してください。
offsetEnd String 任意 オフセット。詳しくは、『Messaging APIドキュメント』の「オフセット」を参照してください。
action Object 任意 タップされたときのアクション。アクションオブジェクトを指定します。このプロパティをサポートするLINEのバージョンは以下のとおりです。
  • iOS版とAndroid版のLINE 8.11.0以降

ボックスの例

{
  "type": "box",
  "layout": "vertical",
  "contents": [
    {
      "type": "image",
      "url": "https://example.com/flex/images/image.jpg"
    },
    {
      "type": "separator"
    },
    {
      "type": "text",
      "text": "Text in the box"
    }
  ]
}
ボタン

ボタンを描画するコンポーネントです。ユーザーがタップすると、指定したアクションが実行されます。

プロパティ タイプ 必須 説明
type String 必須 button
action Object 必須 タップされたときのアクション。アクションオブジェクトを指定します。
flex Number 任意 親要素内での、このコンポーネントの幅または高さの比率。詳しくは、『Messaging APIドキュメント』の「コンポーネントの幅と高さ」を参照してください。
margin String 任意 親要素内での、このコンポーネントと前のコンポーネントの間の最小スペース。詳しくは、『Messaging APIドキュメント』の「コンポーネントのmarginプロパティ」を参照してください。
position String 任意 offsetTopoffsetBottomoffsetStartoffsetEndの基準。以下のいずれかの値を指定します。
  • relative:直前のボックスを基準にします。
  • absolute:親要素の左上を基準にします。
デフォルト値はrelativeです。詳しくは、『Messaging APIドキュメント』の「オフセット」を参照してください。
offsetTop String 任意 オフセット。詳しくは、『Messaging APIドキュメント』の「オフセット」を参照してください。
offsetBottom String 任意 オフセット。詳しくは、『Messaging APIドキュメント』の「オフセット」を参照してください。
offsetStart String 任意 オフセット。詳しくは、『Messaging APIドキュメント』の「オフセット」を参照してください。
offsetEnd String 任意 オフセット。詳しくは、『Messaging APIドキュメント』の「オフセット」を参照してください。
height String 任意 ボタンの高さ。smまたはmdのいずれかの値を指定できます。デフォルト値はmdです。
style String 任意 ボタンの表示形式。以下のいずれかの値を指定します。
  • primary:濃色のボタン向けのスタイル
  • secondary:淡色のボタン向けのスタイル
  • link:HTMLのリンクのスタイル
デフォルト値はlinkです。