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

Messaging APIリファレンス

共通仕様

レート制限

APIごとに実行できるリクエスト回数とMessaging APIによって送信されるメッセージの受信者数の制限は以下のとおりです。レート制限はご利用のプランによって異なります。お住いの地域で利用できるLINE@プランについて詳しくは、LINE@ウェブサイトを参照してください。

プラン APIリクエスト回数の制限 メッセージ受信者数の制限
Developer Trial APIごとに1,000/分 ボットごとに20,000/分
その他のプラン APIごとに10,000/分 ボットごとに200,000/分

ステータスコード

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

エラーレスポンス

エラー発生時は、以下の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が存在しない場合などにこのエラーが発生します。

エラーレスポンスの例

{  
   "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を返す必要があります。

署名を検証する

X-Line-Signatureリクエストヘッダーに含まれる署名を検証して、リクエストがLINEプラットフォームから送信されたことを確認する必要があります。

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

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

署名検証の例

# 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",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U4af4980629..."
      },
      "message": {
        "id": "325708",
        "type": "text",
        "text": "Hello, world"
      }
    },
    {
      "replyToken": "8cf9239d56244f4197887e939187e19e",
      "type": "follow",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U4af4980629..."
      }
    }
  ]
}

共通プロパティ

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

プロパティ タイプ 説明
type String イベントのタイプを表す識別子
timestamp Number イベントの発生時刻(ミリ秒)
source Object イベントの送信元情報を含むユーザーグループ、またはトークルームオブジェクト

送信元ユーザー

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

送信元ユーザーの例

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

送信元グループ

プロパティ タイプ 説明
type String group
groupId String 送信元グループのID
userId String 送信元ユーザーのID。メッセージイベントにのみ含まれます。ユーザーが公式アカウントの利用条件に同意していない場合は含まれません。

送信元グループの例

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

送信元トークルーム

プロパティ タイプ 説明
type String room
roomId String 送信元トークルームのID
userId String 送信元ユーザーのID。メッセージイベントにのみ含まれます。ユーザーが公式アカウントの利用条件に同意していない場合は含まれません。

送信元トークルームの例

  "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",
  "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:LINE以外のプロバイダー
contentProvider.originalContentUrl String 画像ファイルのURL。contentProvider.typeがexternalの場合にのみ含まれます。
contentProvider.previewImageUrl String プレビュー画像のURL。contentProvider.typeがexternalの場合にのみ含まれます。

画像メッセージの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "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:LINE以外のプロバイダー
contentProvider.originalContentUrl String 動画ファイルのURL。contentProvider.typeがexternalの場合にのみ含まれます。
contentProvider.previewImageUrl String プレビュー画像のURL。contentProvider.typeがexternalの場合にのみ含まれます。

動画メッセージの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "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.ContentProviderType String 音声ファイルを提供するプロバイダー。
  • line:LINE。バイナリの音声データはcontentエンドポイントから取得できます。
  • external:LINE以外のプロバイダー
contentProvider.originalContentUrl String 音声ファイルのURL。contentProvider.typeがexternalの場合にのみ含まれます。

音声メッセージの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "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",
  "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",
  "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

スタンプメッセージの例

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

フォローイベント

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

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

フォローイベントの例

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

フォロー解除イベント

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

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

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

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

参加イベント

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

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

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

参加イベントの例

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

退出イベント

ユーザーがグループからボットを削除したか、ボットがグループまたはトークルームから退出したことを示すイベントです。

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

退出イベントの例

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

ポストバックイベント

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

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

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

{  
   "type":"postback",
   "replyToken":"b60d432864f44d079f6d8efe86cf404b",
   "source":{  
      "userId":"U91eeaf62d...",
      "type":"user"
   },
   "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"
}

ビーコンイベント

LINE Beaconデバイスの受信圏をユーザーが出入りしたことを示すイベントオブジェクトです。ビーコンイベントには応答できます。

プロパティ タイプ 説明
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 【廃止予定】ユーザーがビーコンの受信圏外に出ました。
注:leaveイベントは企業ユーザー様にはご利用いただけません。この機能のご利用をご希望の企業ユーザー様は、LINEの貴社担当者までお問い合わせください。
banner ユーザーがビーコンバナーをタップしました。

ビーコンイベントの例

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "beacon",
  "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",
  "replyToken": "b60d432864f44d079f6d8efe86cf404b",
  "source": {
    "userId": "U91eeaf62d...",
    "type": "user"
  },
  "timestamp": 1513669370317,
  "link": {
    "result": "ok",
    "nonce": "xxxxxxxxxxxxxxx"
  }
}

linkオブジェクト

プロパティ タイプ 説明
result String 連携が成功したかどうかを示す値。以下のどちらかになります。
  • ok:連携が成功したことを示します。
  • failed:ユーザーのすり替えなどが原因で、連携が失敗したことを示します。
nonce String ユーザーIDの検証時に指定したノンス

linkオブジェクトの例

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

OAuth

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

注:この方法では、30日間有効な短期のチャネルアクセストークンが発行されます。長期のチャネルアクセストークンを発行するには、コンソールにある[再発行]ボタンを使います(長期のアクセストークンは、公式アカウントまたは特定のLINE@プランをご利用の場合はご利用いただけません)。

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

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

HTTPリクエスト

POST https://api.line.me/v2/oauth/accessToken

リクエストヘッダー

リクエストヘッダー 説明
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
// No sample code available
# 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リクエスト

POST https://api.line.me/v2/oauth/revoke

リクエストヘッダー

リクエストヘッダー 説明
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
// No sample code available
# 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を使って通知されます。応答できるイベントには応答トークンが発行されます。

応答トークンは一定の期間が経過すると無効になるため、メッセージを受信したらすぐに応答を返す必要があります。応答トークンは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

リクエストの例

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オブジェクトを返します。

レスポンスの例

{}

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

注:プッシュメッセージは一部のプランでのみご利用いただけます。詳しくは、LINE@サイトを参照してください。

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

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

リクエストの例

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オブジェクトを返します。

レスポンスの例

{}

複数のユーザーにメッセージを送る

注:プッシュメッセージに対応するプランでのみご利用いただけます。詳しくは、LINE@サイトを参照してください。

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

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

リクエストの例

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
# 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.line.me/v2/bot/message/{messageId}/content

リクエストヘッダー

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

パスパラメータ

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

レスポンス

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

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

リクエストの例

curl -v -X GET https://api.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
    });
  });

プロフィール

プロフィールを取得する

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

HTTPリクエスト

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

リクエストヘッダー

リクエストヘッダー 説明
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>')
    print(profile.display_name)
    print(profile.user_id)
    print(profile.picture_url)
    print(profile.status_message)
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
statusMessage String ステータスメッセージ

レスポンスの例

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

グループ

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

注:この機能は認証済みLINE@アカウントまたは公式アカウントのみでご利用いただけます。詳しくは、LINE@サイトの「LINE@アカウントを作成しましょう」ページまたはLINE Partnerサイトを参照してください。

ボットが参加しているグループのメンバーの、ユーザーIDを取得するAPIです。ボットを友だちとして追加していないユーザーや、ボットをブロックしているユーザーのユーザー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
# No sample code available
// 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.getGroupMemberIds('<groupId>')
  .then((ids) => {
    ids.forEach((id) => console.log(id));
  })
  .catch((err) => {
    // error handling
  });

レスポンス

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

プロパティ タイプ 説明
memberIds 文字列の配列 グループメンバーのユーザーIDのリスト。memberIdsで返されるユーザーIDの数は可変です。公式アカウントの利用条件に同意していないユーザーは、memberIdsに含まれません。
最大ユーザー数:100
next String 継続トークン。グループメンバーのユーザーIDの、次の配列を取得するために使用します。このプロパティは、前回までのレスポンスのmemberIdsで取得しきれなかったユーザーIDがある場合にのみ返されます。

レスポンスの例

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

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

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

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
# No sample code available
// 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.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を取得する

注:この機能は認証済みLINE@アカウントまたは公式アカウントのみでご利用いただけます。詳しくは、LINE@サイトの「LINE@アカウントを作成しましょう」ページまたはLINE Partnerサイトを参照してください。

ボットが参加しているトークルームのメンバーの、ユーザーIDを取得するAPIです。ボットを友だちとして追加していないユーザーや、ボットをブロックしているユーザーのユーザー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
# No sample code available
// 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.getRoomMemberIds('<roomId>')
  .then((ids) => {
    ids.forEach((id) => console.log(id));
  })
  .catch((err) => {
    // error handling
  });

レスポンス

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

プロパティ タイプ 説明
memberIds 文字列の配列 トークルームメンバーのユーザーIDのリスト。memberIdsで返されるユーザーIDの数は可変です。公式アカウントの利用条件に同意していないユーザーは、memberIdsに含まれません。
最大ユーザー数:100
next String 継続トークン。トークルームメンバーのユーザーIDの、次の配列を取得するために使用します。このプロパティは、前回までのレスポンスのmemberIdsで取得しきれなかったユーザーIDがある場合にのみ返されます。

レスポンスの例

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

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

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

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
# No sample code available
// 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.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オブジェクトを返します。

レスポンスの例

{}

リッチメニュー

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

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

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

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

リッチメニューを表示するには、リッチメニューの画像をアップロードし、さらにデフォルトのリッチメニューを設定するかリッチメニューをユーザーとリンクする必要があります。1つのボットに対して最大で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
# 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とリッチメニューIDを返します。

レスポンスの例

{
  "richMenuId": "{richMenuId}"
}

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

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

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

  • 画像フォーマット:JPEGまたはPNG
  • 画像サイズ:2500×1686または2500×843ピクセル
  • 最大ファイルサイズ:1MB

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

HTTPリクエスト

POST https://api.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.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
# 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.line.me/v2/bot/richmenu/{richMenuId}/content

リクエストヘッダー

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

パスパラメータ

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

レスポンス

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

リクエストの例

curl -v -X GET https://api.line.me/v2/bot/richmenu/{richMenuId}/content \
-H 'Authorization: Bearer {channel access token}' \
-o picture.jpg
// 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

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

アップロードされたすべてのリッチメニューを取得するAPIです。

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
# 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リッチメニューレスポンスオブジェクトのリストを返します。

プロパティ タイプ 説明
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
# 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レスポンスが返されます。

レスポンスの例

{
  "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
# 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です。デフォルトのリッチメニューは、ボットと友だちになっているユーザーのうち、個別にリッチメニューをリンクされていないすべてのユーザーに表示されます。

リッチメニューの表示優先順位は、高い順に、Messaging APIで設定するユーザー単位のリッチメニュー、Messaging APIで設定するデフォルトのリッチメニュー、LINE@マネージャーで設定するデフォルトのリッチメニューです。

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
# 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オブジェクトを返します。

レスポンスの例

{}

デフォルトのリッチメニューの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
# 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とリッチメニュー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
# 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です。複数のリッチメニューを1人のユーザーに同時にリンクすることはできません。

リッチメニューの表示優先順位は、高い順に、Messaging APIで設定するユーザー単位のリッチメニュー、Messaging APIで設定するデフォルトのリッチメニューLINE@マネージャーで設定するデフォルトのリッチメニューです。

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
# 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オブジェクトを返します。

レスポンスの例

{}

ユーザーのリッチメニューの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
# 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とリッチメニュー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
# 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リクエスト

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
# 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と連携トークンを返します。連携トークンの有効期間は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
JPEG
最大画像サイズ:1024×1024
最大ファイルサイズ:1MB
previewImageUrl String 必須 プレビュー画像のURL(最大文字数:1000)
HTTPS
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
mp4
最大長:1分
最大ファイルサイズ:10MB

一定以上に縦長・横長の動画を送信した場合、一部の環境では動画の一部が欠けて表示される場合があります。
previewImageUrl String 必須 プレビュー画像のURL(最大文字数:1000)
HTTPS
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
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
イメージマップに使える画像の仕様について詳しくは、「画像の設定方法」を参照してください。
altText String 必須 代替テキスト
最大文字数:400
baseSize.width Number 必須 基本画像の幅(px単位)。1040を指定します。
baseSize.height Number 必須 基本画像の幅を1040pxとした場合の高さ
video.originalContentUrl String ※1 動画ファイルのURL(最大文字数:1000)
HTTPS
mp4
最大長:1分
最大ファイルサイズ:10MB

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

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

画像の設定方法

イメージマップに使える画像の仕様は以下のとおりです。

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

5つの異なるサイズの画像を「baseUrl/{image width}」の形式でアクセスできるようにします。これにより、デバイスに応じて望ましい解像度でLINEに画像がダウンロードされます。

たとえば、ベースURLが以下の場合を考えます。

https://example.com/images/cats

幅が700pxの画像のURLは以下になります。

https://example.com/images/cats/700

注:https://example.com/images/cats/700にアクセスして、画像が表示されることを確認してください。
注:画像のファイル名に、拡張子は含めないでください。

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

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

領域がタップされると、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
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 必須 領域の左上角からの横方向の相対位置
y Number 必須 領域の左上角からの縦方向の相対位置
width Number 必須 タップ領域の幅
height Number 必須 タップ領域の高さ

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

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

テンプレートメッセージ

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

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

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

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

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

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

ボタンテンプレート

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

プロパティ タイプ 必須 説明
type String 必須 buttons
thumbnailImageUrl String 任意 画像URL(最大文字数:1000)
HTTPS
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
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
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は、複数の要素を組み合わせてレイアウトを自由にカスタマイズできるメッセージです。詳しくは、「Flex Messageを使う」を参照してください。

プロパティ タイプ 必須 説明
type String 必須 flex
altText String 必須 代替テキスト
最大文字数:400
contents Object 必須 Flex Messageのコンテナオブジェクト

コンテナ

コンテナはFlex Messageの最上位の構造です。以下のタイプのコンテナを利用できます。

コンテナのJSONデータのサンプルや用途については、「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つのブロックを含めることができます。各ブロックの用途について詳しくは、「ブロック」を参照してください。

バブルコンテナを定義するJSONデータの最大サイズは、10KBです。

プロパティ タイプ 必須 説明
type String 必須 bubble
direction String 任意 テキストの書字方向と水平ボックス内のコンポーネントの並び順。以下のいずれかの値を指定します。
  • ltr:左から右
  • rtl:右から左
デフォルト値はltrです。
header Object 任意 ヘッダーブロック。ボックスコンポーネントを指定します。
hero Object 任意 ヒーローブロック。画像コンポーネントを指定します。
body Object 任意 ボディブロック。ボックスコンポーネントを指定します。
footer Object 任意 フッターブロック。ボックスコンポーネントを指定します。
styles Object 任意 各ブロックのスタイル。バブルスタイルオブジェクトを指定します。詳しくは、「ブロックのスタイルを定義するオブジェクト」を参照してください。

バブルコンテナの例

{
  "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 ブロックスタイルオブジェクト 任意 ヘッダーブロックのスタイル
hero ブロックスタイルオブジェクト 任意 ヒーローブロックのスタイル
body ブロックスタイルオブジェクト 任意 ボディブロックのスタイル
footer ブロックスタイルオブジェクト 任意 フッターブロックのスタイル

ブロックスタイル

プロパティ タイプ 必須 説明
backgroundColor String 任意 ブロックの背景色。16進数カラーコードで設定します。
separator Boolean 任意 ブロックの上にセパレータを配置するかどうかを指定します。先頭のブロックの上にはセパレータを配置できないため、trueを設定しても無視されます。デフォルト値はfalseです。
separatorColor String 任意 セパレータの色。16進数カラーコードで設定します。

バブルスタイルオブジェクトとブロックスタイルオブジェクトの例

  "styles": {
    "header": {
      "backgroundColor": "#00ffff"
    },
    "hero": {
      "separator": true,
      "separatorColor": "#000000"
    },
    "footer": {
      "backgroundColor": "#00ffff",
      "separator": true,
      "separatorColor": "#000000"
    }
  }

カルーセルコンテナ

複数のバブルコンテナ、つまり複数のメッセージバブルを構成するコンテナです。バブルは横にスクロールして順番に表示できます。

カルーセルコンテナを定義するJSONデータの最大サイズは、50KBです。

プロパティ タイプ 必須 説明
type String 必須 carousel
contents バブルコンテナの配列 必須 最大バブル数:10

バブルコンテナにボディブロックがある場合は、そのバブルコンテナがカルーセルで最大の高さを持つバブルコンテナと同じ高さになるように、ボディブロックが伸長します。

コンポーネント

コンポーネントはFlex Messageのコンテナを構成するオブジェクトです。以下のタイプのコンポーネントを利用できます。

各コンポーネントのJSONデータのサンプルや用途については、「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 必須 このボックス内のコンポーネントの配置スタイル。以下のいずれかの値を指定します。
  • horizontal:コンポーネントを水平に配置します。並び順はバブルコンテナのdirectionプロパティで指定します。
  • vertical:コンポーネントを上から下に向かって垂直に配置します。
  • baselinehorizontalを指定した場合と同様にコンポーネントを配置します。ただし、各コンポーネントのベースラインを揃えて配置する点が異なります。
詳しくは、「ボックスレイアウトの種類」を参照してください。
contents Objectの配列 必須 このボックス内のコンポーネント。以下のコンポーネントを指定できます。
flex Number 任意 親ボックス内での、このボックスの幅または高さの比率。水平ボックス内でのデフォルト値は1、垂直ボックス内でのデフォルト値は0です。詳しくは、「コンポーネントの幅と高さ」を参照してください。
spacing String 任意 このボックス内のコンポーネントの間の最小スペース。nonexssmmdlgxlxxlのいずれかの値を指定できます。noneではスペースが設定されず、それ以外は列挙した順にサイズが大きくなります。デフォルト値はnoneです。
特定のコンポーネントについてこの設定を上書きするには、そのコンポーネントでmarginプロパティを設定します。
margin String 任意 親ボックス内での、このボックスと前のコンポーネントの間の最小スペース。nonexssmmdlgxlxxlのいずれかの値を指定できます。noneではスペースが設定されず、それ以外は列挙した順にサイズが大きくなります。デフォルト値は親ボックスのspacingプロパティの値です。
このボックスが先頭である場合、marginプロパティを設定しても無視されます。
action Object 任意 タップされたときのアクション。アクションオブジェクトを指定します。このプロパティをサポートするLINEのバージョンは以下のとおりです。
  • iOS版とAndroid版のLINE 8.11.0以降
  • Windows版とmacOS版のLINE 5.9.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 任意 親ボックス内での、このコンポーネントの幅または高さの比率。水平ボックス内でのデフォルト値は1、垂直ボックス内でのデフォルト値は0です。詳しくは、「コンポーネントの幅と高さ」を参照してください。
margin String 任意 親ボックス内での、このコンポーネントと前のコンポーネントの間の最小スペース。nonexssmmdlgxlxxlのいずれかの値を指定できます。noneではスペースが設定されず、それ以外は列挙した順にサイズが大きくなります。デフォルト値は親ボックスのspacingプロパティの値です。
このコンポーネントが先頭である場合、marginプロパティを設定しても無視されます。
height String 任意 ボタンの高さ。smまたはmdのいずれかの値を指定できます。デフォルト値はmdです。
style String 任意 ボタンの表示形式。以下のいずれかの値を指定します。
  • link:HTMLのリンクのスタイル
  • primary:濃色のボタン向けのスタイル
  • secondary:淡色のボタン向けのスタイル
デフォルト値はlinkです。
color String 任意 styleプロパティがlinkの場合は文字の色、primaryまたはsecondaryの場合は背景色です。16進数カラーコードで設定します。
gravity String 任意 垂直方向の配置スタイル。以下のいずれかの値を指定します。
  • top:上揃え
  • bottom:下揃え
  • center:中央揃え
デフォルト値はtopです。
親ボックスのlayoutプロパティがbaselineの場合、gravityプロパティを設定しても無視されます。

ボタンコンポーネントの例

{
  "type": "button",
  "action": {
    "type": "uri",
    "label": "Tap me",
    "uri": "https://example.com"
  },
  "style": "primary",
  "color": "#0000ff"
}

フィラーコンポーネント

コンポーネントの間の余白を埋めるための不可視のコンポーネントです。

プロパティ タイプ 必須 説明
type String 必須 filler
  • フィラーのflexプロパティの値は、1に固定されます。
  • フィラーでは親ボックスのspacingプロパティが無視されます。

フィラーコンポーネントの例

{
  "type": "filler"
}

アイコンコンポーネント

アイコンを描画するコンポーネントです。

プロパティ タイプ 必須 説明
type String 必須 icon
url String 必須 画像のURL
プロトコル:HTTPS
画像フォーマット:JPEGまたはPNG
最大画像サイズ:240×240px
最大データサイズ:1MB
margin String 任意 親ボックス内での、このコンポーネントと前のコンポーネントの間の最小スペース。nonexssmmdlgxlxxlのいずれかの値を指定できます。noneではスペースが設定されず、それ以外は列挙した順にサイズが大きくなります。デフォルト値は親ボックスのspacingプロパティの値です。
このコンポーネントが先頭である場合、marginプロパティを設定しても無視されます。
size String 任意 アイコンの幅の最大サイズ。xxsxssmmdlgxlxxl3xl4xl5xlのいずれかの値を指定できます。列挙した順にサイズが大きくなります。デフォルト値はmdです。
aspectRatio String 任意 アイコンのアスペクト比。1:12:13:1のいずれかの値を指定できます。デフォルト値は1:1です。

アイコンのflexプロパティの値は、0に固定されます。

アイコンコンポーネントの例

{
  "type": "icon",
  "url": "https://example.com/icon/png/caution.png",
  "size": "lg"
}

画像コンポーネント

画像を描画するコンポーネントです。

プロパティ タイプ 必須 説明
type String 必須 image
url String 必須 画像のURL
プロトコル:HTTPS
画像フォーマット:JPEGまたはPNG
最大画像サイズ:1024×1024px
最大データサイズ:1MB
flex Number 任意 親ボックス内での、このコンポーネントの幅または高さの比率。水平ボックス内でのデフォルト値は1、垂直ボックス内でのデフォルト値は0です。詳しくは、「コンポーネントの幅と高さ」を参照してください。
margin String 任意 親ボックス内での、このコンポーネントと前のコンポーネントの間の最小スペース。nonexssmmdlgxlxxlのいずれかの値を指定できます。noneではスペースが設定されず、それ以外は列挙した順にサイズが大きくなります。デフォルト値は親ボックスのspacingプロパティの値です。
このコンポーネントが先頭である場合、marginプロパティを設定しても無視されます。
align String 任意 水平方向の配置スタイル。以下のいずれかの値を指定します。
  • start:左揃え
  • end:右揃え
  • center:中央揃え
デフォルト値はcenterです。
gravity String 任意 垂直方向の配置スタイル。以下のいずれかの値を指定します。
  • top:上揃え
  • bottom:下揃え
  • center:中央揃え
デフォルト値はtopです。
親ボックスのlayoutプロパティがbaselineの場合、gravityプロパティを設定しても無視されます。
size String 任意 画像の幅の最大サイズ。xxsxssmmdlgxlxxl3xl4xl5xlfullのいずれかの値を指定できます。列挙した順にサイズが大きくなります。デフォルト値はmdです。
aspectRatio String 任意 画像のアスペクト比。1:11.51:11.91:14:316:920:132:13:13:49:161:21:3のいずれかの値を指定できます。デフォルト値は1:1です。
aspectMode String 任意 画像の表示形式。以下のいずれかの値を指定します。
  • cover:描画領域全体に画像を表示します。描画領域に収まらない部分は切り詰められます。
  • fit:描画領域に画像全体を表示します。縦長の画像では左右に、横長の画像では上下に余白が表示されます。
  • デフォルト値はfitです。
backgroundColor String 任意 画像の背景色。16進数カラーコードで設定します。
action Object 任意 タップされたときのアクション。アクションオブジェクトを指定します。

画像コンポーネントの例

{
  "type": "image",
  "url": "https://example.com/flex/images/image.jpg",
  "size": "full"
}

セパレータコンポーネント

親ボックス内のコンポーネントの間に境界線を描画するコンポーネントです。

プロパティ タイプ 必須 説明
type String 必須 separator
margin String 任意 親ボックス内での、このコンポーネントと前のコンポーネントの間の最小スペース。nonexssmmdlgxlxxlのいずれかの値を指定できます。noneではスペースが設定されず、それ以外は列挙した順にサイズが大きくなります。デフォルト値は親ボックスのspacingプロパティの値です。
このコンポーネントが先頭である場合、marginプロパティを設定しても無視されます。
color String 任意 セパレータの色。16進数カラーコードで設定します。

セパレータコンポーネントの例

{
  "type": "separator",
  "color": "#000000"
}

スペーサーコンポーネント

ボックス内の先頭または末尾に固定サイズのスペースを配置する不可視のコンポーネントです。

プロパティ タイプ 必須 説明
type String 必須 spacer
size String 任意 スペースのサイズ。xssmmdlgxlxxlのいずれかの値を指定できます。列挙した順にサイズが大きくなります。デフォルト値はmdです。

スペーサーでは親ボックスのspacingプロパティが無視されます。

スペーサーコンポーネントの例

{
  "type": "spacer",
  "size": "md"
}

テキストコンポーネント

テキストを描画するコンポーネントです。テキストに書式を設定できます。

プロパティ タイプ 必須 説明
type String 必須 text
text String 必須 テキスト
flex Number 任意 親ボックス内での、このコンポーネントの幅または高さの比率。水平ボックス内でのデフォルト値は1、垂直ボックス内でのデフォルト値は0です。詳しくは、「コンポーネントの幅と高さ」を参照してください。
margin String 任意 親ボックス内での、このコンポーネントと前のコンポーネントの間の最小スペース。nonexssmmdlgxlxxlのいずれかの値を指定できます。noneではスペースが設定されず、それ以外は列挙した順にサイズが大きくなります。デフォルト値は親ボックスのspacingプロパティの値です。
このコンポーネントが先頭である場合、marginプロパティを設定しても無視されます。
size String 任意 フォントサイズ。xxsxssmmdlgxlxxl3xl4xl5xlのいずれかの値を指定できます。列挙した順にサイズが大きくなります。デフォルト値はmdです。
align String 任意 水平方向の配置スタイル。以下のいずれかの値を指定します。
  • start:左揃え
  • end:右揃え
  • center:中央揃え
デフォルト値はstartです。
gravity String 任意 垂直方向の配置スタイル。以下のいずれかの値を指定します。
  • top:上揃え
  • bottom:下揃え
  • center:中央揃え
デフォルト値はtopです。
親ボックスのlayoutプロパティがbaselineの場合、gravityプロパティを設定しても無視されます。
wrap Boolean 任意 文字列を折り返すかどうかを指定します。デフォルト値はfalseです。trueに設定した場合、改行文字(\n)を使って改行できます。
maxLines Number 任意 最大行数。テキストがこの行数に収まらない場合は、最終行の末尾に省略記号(…)が表示されます。0ではすべてのテキストが表示されます。デフォルト値は0です。このプロパティをサポートするLINEのバージョンは以下のとおりです。
  • iOS版とAndroid版のLINE 8.11.0以降
  • Windows版とmacOS版のLINE 5.9.0以降
weight String 任意 フォントの太さ。regularboldのいずれかの値を指定できます。boldを指定すると太字になります。デフォルト値はregularです。
color String 任意 フォントの色。16進数カラーコードで設定します。
action Object 任意 タップされたときのアクション。アクションオブジェクトを指定します。

テキストコンポーネントの例

{
  "type": "text",
  "text": "Hello, World!",
  "size": "xl",
  "weight": "bold",
  "color": "#0000ff"
}

アクションオブジェクト

ユーザーがメッセージ内のボタンまたは画像をタップしたときに、ボットが実行できるアクションのタイプです。

ポストバックアクション

このアクションが関連づけられたコントロールがタップされると、dataプロパティに指定された文字列を含むポストバックイベントが、Webhookを介して返されます。

プロパティ タイプ 必須 説明
type String 必須 postback
label String 説明を参照 アクションのラベル
  • 画像カルーセル以外のテンプレートメッセージには必須です。最大文字数:20
  • 画像カルーセルテンプレートメッセージでは省略可能です。最大文字数:12
  • リッチメニューでは省略可能です。ユーザーデバイスのアクセシビリティ機能が有効な場合に読み上げられます。最大文字数:20。iOS版LINE 8.2.0以降でサポートされます。
  • クイックリプライボタンでは必須です。最大文字数:20。Android版とiOS版のLINE 8.11.0以降でサポートされます。
  • Flex Messageでは、ボタンコンポーネントで必須です。ボックス、画像、およびテキストコンポーネントでは、指定しても表示されません。最大文字数:20
data String 必須 Webhookを介して、ポストバックイベントpostback.dataプロパティで返される文字列
最大文字数:300
displayText String 説明を参照 アクションの実行時に、ユーザーのメッセージとしてLINEのトーク画面に表示されるテキスト。クイックリプライボタンでは必須です。それ以外のメッセージタイプでは省略可能です。
最大文字数:300
displayTextプロパティとtextプロパティは、同時に設定できません。
text String 任意 【廃止予定】アクションの実行時に、ユーザーのメッセージとしてLINEのトーク画面に表示されるテキスト。Webhookを介してサーバーに返されます。クイックリプライボタンでは使用しないでください。
最大文字数:300
displayTextプロパティとtextプロパティは、同時に設定できません。

ポストバックアクションオブジェクトの例

{  
   "type":"postback",
   "label":"Buy",
   "data":"action=buy&itemid=111",
   "text":"Buy"
}

メッセージアクション

このアクションが関連づけられたコントロールがタップされると、textプロパティの文字列がユーザーからのメッセージとして送信されます。

プロパティ タイプ 必須 説明
type String 必須 message
label String 説明を参照 アクションのラベル
  • 画像カルーセル以外のテンプレートメッセージには必須です。最大文字数:20
  • 画像カルーセルテンプレートメッセージでは省略可能です。最大文字数:12
  • リッチメニューでは省略可能です。ユーザーデバイスのアクセシビリティ機能が有効な場合に読み上げられます。最大文字数:20。iOS版LINE 8.2.0以降でサポートされます。
  • クイックリプライボタンでは必須です。最大文字数:20。Android版とiOS版のLINE 8.11.0以降でサポートされます。
  • Flex Messageでは、ボタンコンポーネントで必須です。ボックス、画像、およびテキストコンポーネントでは、指定しても表示されません。最大文字数:20
text String 必須 アクションの実行時に送信されるテキスト
最大文字数:300

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

{  
   "type":"message",
   "label":"Yes",
   "text":"Yes"
}

URIアクション

このアクションが関連づけられたコントロールがタップされると、uriプロパティのURIが開きます。

プロパティ タイプ 必須 説明
type String 必須 uri
label String 説明を参照 アクションのラベル
  • 画像カルーセル以外のテンプレートメッセージには必須です。最大文字数:20
  • 画像カルーセルテンプレートメッセージでは省略可能です。最大文字数:12
  • リッチメニューでは省略可能です。ユーザーデバイスのアクセシビリティ機能が有効な場合に読み上げられます。最大文字数:20。iOS版LINE 8.2.0以降でサポートされます。
  • Flex Messageでは、ボタンコンポーネントで必須です。ボックス、画像、およびテキストコンポーネントでは、指定しても表示されません。最大文字数:20
uri String 必須 アクションの実行時に開かれるURI(最大文字数:1000)
使用できるスキームは、httphttpsline、およびtelです。LINE URLスキームについて詳しくは、「LINE URLスキームを使う」を参照してください。

URIアクションオブジェクトの例

{  
   "type":"uri",
   "label":"View details",
   "uri":"http://example.com/page/222"
}

日時選択アクション

注:日時選択アクションは、iOS版LINE 7.9.0以降とAndroid版LINE 7.12.0以降で利用できます。

このアクションが関連づけられたコントロールがタップされると、日時選択ダイアログでユーザーが選択した日時を含むポストバックイベントが、Webhookを介して返されます。日時選択アクションはタイムゾーンの違いに対応していません。

プロパティ タイプ 必須 説明
type String 必須 datetimepicker
label String 説明を参照 アクションのラベル
  • 画像カルーセル以外のテンプレートメッセージには必須です。最大文字数:20
  • 画像カルーセルテンプレートメッセージでは省略可能です。最大文字数:12
  • リッチメニューでは省略可能です。ユーザーデバイスのアクセシビリティ機能が有効な場合に読み上げられます。最大文字数:20。iOS版LINE 8.2.0以降でサポートされます。
  • クイックリプライボタンでは必須です。最大文字数:20。Android版とiOS版のLINE 8.11.0以降でサポートされます。
  • Flex Messageでは、ボタンコンポーネントで必須です。ボックス、画像、およびテキストコンポーネントでは、指定しても表示されません。最大文字数:20
data String 必須 Webhookを介して、ポストバックイベントpostback.dataプロパティで返される文字列
最大文字数:300
mode String 必須 アクションモード
date:日付を選択します。
time:時刻を選択します。
datetime:日付と日時を選択します。
initial String 任意 日付または時刻の初期値
max String 任意 選択可能な日付または時刻の最大値。minの値より大きい必要があります。
min String 任意 選択可能な日付または時刻の最小値。maxの値より小さい必要があります。

日付と日時の形式

initialmax、およびminの値の日付と日時の形式は以下のとおりです。full-datetime-hour、およびtime-minuteの形式は、RFC3339プロトコルで定義されています。

モード 形式
date full-date
最大値:2100-12-31
最小値:1900-01-01
2017-06-18
time time-hour:time-minute
最大値:23:59
最小値:00:00
00:00
06:15
23:59
datetime full-dateTtime-hour:time-minuteまたはfull-datettime-hour:time-minute
最大値:2100-12-31T23:59
最小値:1900-01-01T00:00
2017-06-18T06:15
2017-06-18t06:15

日時選択アクションオブジェクトの例

{  
   "type":"datetimepicker",
   "label":"Select date",
   "data":"storeId=12345",
   "mode":"datetime",
   "initial":"2017-12-25t00:00",
   "max":"2018-01-24t23:59",
   "min":"2017-12-25t00:00"
}

カメラアクション

クイックリプライボタンにのみ設定できるアクションです。このアクションが関連づけられたボタンがタップされると、LINE内のカメラが起動します。

プロパティ タイプ 必須 説明
type String 必須 camera
label String 必須 アクションのラベル
最大文字数:20

カメラアクションオブジェクトの例

{  
   "type":"camera",
   "label":"Camera"
}

カメラロールアクション

クイックリプライボタンにのみ設定できるアクションです。このアクションが関連づけられたボタンがタップされると、LINEのカメラロール画面が開きます。

プロパティ タイプ 必須 説明
type String 必須 cameraRoll
label String 必須 アクションのラベル
最大文字数:20

カメラロールアクションオブジェクトの例

{  
   "type":"cameraRoll",
   "label":"Camera roll"
}

位置情報アクション

クイックリプライボタンにのみ設定できるアクションです。このアクションが関連づけられたボタンがタップされると、LINEの位置情報画面が開きます。

プロパティ タイプ 必須 説明
type String 必須 location
label String 必須 アクションのラベル
最大文字数:20

位置情報アクションオブジェクトの例

{  
   "type":"location",
   "label":"Location"
}

リッチメニューの構造

リッチメニューは以下のどちらかのオブジェクトで表されます。

これらのオブジェクトは領域オブジェクトアクションオブジェクトから構成されます。

リッチメニューオブジェクト

プロパティ タイプ 必須 説明
size Object 必須 sizeオブジェクト。トークルームに表示されるリッチメニューの幅と高さを表します。使用できるリッチメニューの画像サイズは2500×1686pxまたは2500×843pxです。
selected Boolean 必須 デフォルトでリッチメニューを表示する場合はtrueです。そうでなければfalseです。
name String 必須 リッチメニューの名前。リッチメニューの管理に役立ちます。ユーザーには表示されません。
最大文字数:300
chatBarText String 必須 トークルームメニューに表示されるテキストです。
最大文字数:14
areas Array 必須 タップ領域の座標とサイズを定義する、領域オブジェクトの配列。
最大領域オブジェクト数:20

リッチメニューオブジェクトの例

{
  "size": {
    "width": 2500,
    "height": 1686
  },
  "selected": false,
  "name": "Nice richmenu",
  "chatBarText": "Tap to open",
  "areas": [
    {
      "bounds": {
        "x": 0,
        "y": 0,
        "width": 2500,
        "height": 1686
      },
      "action": {
        "type": "postback",
        "data": "action=buy&itemid=123"
      }
    }
  ]
}

リッチメニューレスポンスオブジェクト

プロパティ タイプ 説明
richMenuId  String リッチメニューID
size Object sizeオブジェクト。トークルームに表示されるリッチメニューの幅と高さを表します。使用できるリッチメニューの画像サイズは2500×1686pxまたは2500×843pxです。
selected Boolean デフォルトでリッチメニューを表示する場合はtrueです。そうでなければfalseです。
name String リッチメニューの名前。リッチメニューの管理に役立ちます。ユーザーには表示されません。
最大文字数:300
chatBarText String トークルームメニューに表示されるテキストです。
最大文字数:14
areas Array タップ領域の座標とサイズを定義する、領域オブジェクトの配列。
最大領域オブジェクト数:20

リッチメニューレスポンスオブジェクトの例

{
  "richMenuId": "{richMenuId}",
  "size": {
    "width": 2500,
    "height": 1686
  },
  "selected": false,
  "name": "Nice richmenu",
  "chatBarText": "Tap to open",
  "areas": [
    {
      "bounds": {
        "x": 0,
        "y": 0,
        "width": 2500,
        "height": 1686
      },
      "action": {
        "type": "postback",
        "label":"Buy",
        "data": "action=buy&itemid=123"
      }
    }
  ]
}

sizeオブジェクト

プロパティ タイプ 必須 説明
width Number 必須 リッチメニューの幅。2500である必要があります。
height Number 必須 リッチメニューの高さ。1686または843である必要があります。

sizeオブジェクトの例

{
   "width":520,
   "height":1040
}

領域オブジェクト

プロパティ タイプ 必須 説明
bounds Object 必須 領域の境界をピクセルで表すオブジェクト。「boundsオブジェクト」を参照してください。
action Object 必須 領域がタップされたときに実行されるアクション。「アクションオブジェクト」を参照してください。

領域オブジェクトの例

{
  "bounds": {
    "x": 0,
    "y": 0,
    "width": 2500,
    "height": 1686
  },
  "action": {
    "type": "postback",
    "label":"Buy",
    "data": "action=buy&itemid=123"
  }
}

boundsオブジェクト
プロパティ タイプ 必須 説明
x Number 必須 領域の左上角からの横方向の相対位置
y Number 必須 領域の左上角からの縦方向の相対位置
width Number 必須 領域の幅
height Number 必須 領域の高さ

boundsオブジェクトの例

{
   "x":0,
   "y":0,
   "width":2500,
   "height":1686
}