本リファレンスおよびエルメAPI・Webhook転送に関するお問い合わせは、以下の専用窓口からお送りください。
専用お問い合わせ窓口を開く1. 概要
本リファレンスは、外部システムからエルメ(L Message)を操作するパブリックAPIと、エルメから外部システムへデータを送信するWebhook転送機能の仕様をまとめたものです。エンドポイントごとに、目的・入力パラメータ・出力パラメータ・リクエスト例・レスポンス例を記載しています。
対象範囲はPhase 1、APIバージョンは /v1、Webhook仕様は版数1.0.0です。
1.1 2つの連携方式
エルメの外部連携は、方向の異なる2つの仕組みで構成されます。外部システムからエルメを操作する場合はAPIを、エルメ側で発生したイベントを外部システムで受け取る場合はWebhook転送機能を使用します。両者は独立しており、どちらか一方のみを利用することもできます。
| 方向 | 仕組み | 内容 |
|---|---|---|
| 外部システム → エルメ | REST API(/v1) | 友だちの取得、タグ・友だち情報の更新、ステップ配信の開始/停止、メッセージ送信などを実行します。認証は X-LME-API-KEY ヘッダーです。 |
| エルメ → 外部システム | Webhook転送 | LINE Platformから届いたイベントの転送と、エルメ内で発生した tag/friend_info 操作の通知を、指定のURLへPOSTします。 |
1.2 主なユースケース
| ケース | 連携フロー | 主要API |
|---|---|---|
| AIボットによる自動応答 | オートメーションツールのAIが友だちからのメッセージ内容を判定し、エルメのAPIを呼び出します。 | メッセージ送信、友だち詳細の取得、タグをつける/外す、ステップ配信の開始/停止、友だち情報の更新 |
| CRM / SFA | CRMが既存の友だち一覧を取得し、指定した友だちのタグ/友だち情報/ステップ配信/対応ステータスを更新するためにAPIを呼び出します。 | 友だち一覧の取得、友だち詳細の取得、タグ/ステップ配信/フィールド一覧の取得、カンバセーションの取得、対応ステータスの更新 |
| EC | ECサイトが商品閲覧、カート追加、チェックアウト、購入、配送、在庫などのイベントを記録し、アプローチ対象となる友だちの情報を更新するためにエルメのAPIを呼び出します。 | タグをつける/外す、友だち情報の更新、ステップ配信の開始/停止、メッセージ送信 |
いずれのケースでも、対象の友だちは lmessage_friend_id または line_friend_id で指定します。
1.3 対象範囲(Phase 1)
- API:友だちの一覧/詳細の取得、タグをつける/外す、友だち情報の更新、ステップ配信の開始/停止、メッセージ送信、テンプレートの取得、カンバセーションの取得。
- LINE公式アカウントデータ転送機能:対象アカウントにLINE Platformから届いたすべてのイベントを転送します。イベント種別による絞り込みは行わず、エルメ側で処理可能かどうかも問いません。
- L Messageデータ転送機能:
tagとfriend_infoの操作の2種類のみを対象とします。
- フォーム回答、ステップ配信などのその他のエルメ内部イベントのWebhook転送。後続フェーズで追加する場合は、実装前に個別のペイロード仕様を合意する必要があります。
1.4 用語・照合キー
| 用語 | 説明 |
|---|---|
lmessage_friend_id | エルメ内部の友だちID(integer)。APIの照合キーとして最も広く使用します。/friends/detail と /conversations/detail はこのIDのみを受け付けます。 |
line_friend_id | LINE Friend ID(string、U から始まる文字列)。メッセージ送信APIでは id_type で切り替えて使用できます。 |
| LOA | LINE公式アカウント(LINE Official Account)。APIキーの発行単位であり、レート制限のカウント単位でもあります。 |
friend_info | 友だち情報フィールド。組み込み(標準)フィールドは負のID、カスタムフィールドは正のIDを使用します(標準フィールドID一覧)。 |
scenario | ステップ配信。scenario_id で開始/停止/再開を指定します。 |
| 対応ステータス | チャットの対応状況を表すステータス(handling status)。/handling-statuses で取得し、/do_action の handling_status アクションで付け外しします。/conversations の絞り込みにも使用します。 |
| 確認状態 | カンバセーションの確認済み/未確認(返信待ち)の状態(confirm_status)。対応ステータスとは別の概念です。/conversations で絞り込み、/do_action の confirm_status アクションで変更します。 |
1.5 API・Webhook一覧
Phase 1で対象とするAPIの一覧です。パラメータの詳細とサンプルは、各章のブロックに記載しています。
| Method | Path | 目的 | 主なInput |
|---|---|---|---|
| GET | /v1/friends | 友だち一覧の取得 | page、limit、line_names、tag_ids、emails… |
| GET | /v1/friends/detail | 友だち詳細の取得 | lmessage_friend_id |
| GET | /v1/tags | タグ一覧の取得 | page、limit |
| GET | /v1/friend-info-fields | 友だち情報フィールド一覧の取得 | page、limit |
| GET | /v1/scenarios | ステップ配信一覧の取得 | page、limit |
| GET | /v1/templates | テンプレート一覧の取得 | page、limit |
| GET | /v1/handling-statuses | 対応ステータス一覧の取得 | なし |
| POST | /v1/messages/push | テキスト/メディアメッセージの送信 | friend_id、messages[]、messages[].type |
| POST | /v1/messages/template | テンプレートメッセージの送信 | friend_id、templates[] |
| GET | /v1/conversations | カンバセーション一覧の取得 | page、limit、confirm_status、handling_status_ids、tag_ids… |
| GET | /v1/conversations/detail | 友だちの直近100件のメッセージの取得 | lmessage_friend_id |
| POST | /v1/do_action | 友だち一括アクション | lmessage_friend_ids[]、actions[]、actions[].type |
| POST | (設定した送信先URL) | LINE公式アカウントデータ転送 | LINEイベントをそのまま転送 |
| POST | (設定した送信先URL) | L Messageデータ転送 | events[](tag / friend_info) |
2. 共通仕様
認証、ページング、冪等性、エラーレスポンスの形式は、すべての /v1 エンドポイントで共通です。
2.1 ベースURL
| 環境 | ベースURL |
|---|---|
| Production | https://api.lmes.jp |
すべてのエンドポイントは /v1 配下に配置します(例:https://api.lmes.jp/v1/friends)。
2.2 認証(APIキー)
すべてのリクエストに X-LME-API-KEY ヘッダーを付与します。APIキーは lme_live_sk_<32hex> 形式で、LOAごとに発行します。
X-LME-API-KEY: lme_live_sk_0123456789abcdef0123456789abcdef Content-Type: application/json
サーバー側では、受け取ったAPIキーをもとに api_keys.key_lookup_hash = HMAC-SHA256(key, API_KEY_PEPPER) を照合し、対象のLOAおよび権限 scope(full/read)を特定します。あわせて is_deleted、status、expires_at を確認し、APIキーが有効かつ利用可能な状態であることを検証します。expires_at が null の場合は、有効期限なしとして扱います。
read 権限のAPIキーで書き込みAPI(POST/PUT/DELETE)を実行した場合は 403 forbidden を返します。書き込みを行う連携では full 権限のキーを使用してください。
APIキーは秘密情報として扱い、クライアントサイドに埋め込まないでください。
2.3 リクエスト形式・日時形式
| 項目 | 仕様 |
|---|---|
| Content-Type | application/json |
| パラメータの渡し方 | 一覧取得API(GET)ではクエリパラメータ、更新系API(POST)ではJSON形式のリクエストボディを使用します。 |
| 日時形式 | YYYY-MM-DD、YYYY-MM-DDTHH:mm:ss+09:00。イベント、予約、決済に関する日時は日本時間(JST)を基準とします。 |
2.4 ページング
一覧取得APIは page と limit のクエリパラメータを受け付けます。
| パラメータ | Type | デフォルト | 説明 |
|---|---|---|---|
page | integer | 1 | 取得するページ番号。 |
limit | integer | 100 | 1ページあたりの取得件数。最大500。 |
レスポンスの pagination オブジェクトには page、limit、total_items、total_pages、has_next が含まれます。has_next が false になるまで page を進めて取得してください。
2.5 レート制限
リクエスト数はLOA単位でカウントし、1分単位の固定ウィンドウ(fixed window)方式とします。カウントは毎分の開始時にリセットされます。カウント対象は、APIキーによる認証が成功したリクエストのみです。
| 種別 | 上限 | 単位 |
|---|---|---|
| 読み取り(GET) | 300リクエスト/分 | LOA単位・1分固定ウィンドウ |
| 書き込み(POST/PUT/DELETE) | 60リクエスト/分 | LOA単位・1分固定ウィンドウ |
| ヘッダー | 説明 |
|---|---|
X-RateLimit-Limit | 現在のウィンドウにおける上限リクエスト数。 |
X-RateLimit-Remaining | 現在のウィンドウで残っているリクエスト数。 |
X-RateLimit-Reset | カウントがリセットされる時刻。 |
Retry-After | 429 応答時のみ。再試行までに待機する秒数。 |
上限を超えた場合は HTTP 429 rate_limited と Retry-After ヘッダー(秒)を返します。指定された秒数だけ待機してから、再度呼び出してください。
2.6 冪等性(Idempotency-Key)
/do_action、/messages/push、/messages/template では、Idempotency-Key ヘッダーにより同一リクエストの重複実行を防止できます。値は利用側で任意に設定でき、最大100文字まで指定できます(超過した場合は 400 invalid_request を返します)。
Idempotency-Key: push-12345-20260730
「操作種別 + 対象ID + 業務上のイベントID(または日時)」のように、同じ業務イベントに対して同じ値、別のイベントには別の値になる組み立て方を推奨します。ネットワークエラー時のリトライでは、初回と同じ値を送信してください。
2.7 共通レスポンス
すべてのAPIは、以下の構造でレスポンスを返します。pagination は一覧取得APIのみに含まれます。
{
"success": true,
"request_id": "req_20260730_001",
"data": {},
"pagination": {"page": 1, "limit": 100, "total_items": 1240, "total_pages": 13, "has_next": true}
}
| Output field | Type | 説明 |
|---|---|---|
success | boolean | リクエストが正常に処理された場合は true。 |
request_id | string | エラー調査が必要な際にログを追跡するためのID。お問い合わせの際はこの値をお知らせください。 |
data | object|array | APIごとの応答本体。 |
pagination | object | 一覧取得APIのページング情報。 |
2.8 エラーレスポンス
| HTTP | Code | 意味 | 例 |
|---|---|---|---|
| 400 | invalid_request | リクエスト形式が不正 | JSONの形式が不正、必須フィールドが不足している |
| 401 | unauthorized | 認証に失敗 | APIキーが未指定、誤っている、有効期限切れ、または削除済み |
| 403 | forbidden | 対象へのアクセス権限がない | APIキーが無効化されている、read 権限のAPIキーで書き込みAPIを実行している、対象のLOAが削除されている |
| 404 | not_found | 対象が存在しない | 友だち、タグ、ステップ配信、テンプレート、友だち情報フィールド/オプション、対応ステータスが見つからない場合、または指定したリソースが別のLOAに属している場合 |
| 409 | conflict | 更新時の重複または競合 | 同一のイベントIDを再送 |
| 422 | validation_error | 入力値がバリデーション条件を満たしていない | フィールド型に対して許可されていない操作 |
| 429 | rate_limited | API呼び出しの上限を超過 | LOA単位の上限(読み取り300 req/分、書き込み60 req/分)を超過。Retry-After ヘッダーで指定された秒数だけ待機してから再度呼び出してください |
3. 友だち
エルメに登録されている友だちの一覧および詳細を取得します。CRMの初回同期や、友だち単位の情報参照に使用します。
3.1 友だち一覧の取得
CRMで初回同期を行う際、またはエルメ内の友だち一覧をページングや基本的なフィルタ条件で更新する際に使用します。
| Parameter | 位置 | 必須 | Type | 説明 |
|---|---|---|---|---|
page | query | 任意 | integer | 取得するページ番号。デフォルトは1です。 |
limit | query | 任意 | integer | 取得する件数。デフォルトは100、最大500です。 |
line_names | query | 任意 | string | CSV | LINE名またはシステム表示名による部分一致検索(大文字・小文字を区別しません)。複数指定した場合はOR条件となります。 |
tag_ids | query | 任意 | integer | CSV | 絞り込みに使用するタグID(/tags から取得)。複数指定した場合はOR条件となります(いずれか1つ以上のタグがついている友だちが対象)。 |
emails | query | 任意 | string | CSV | 絞り込みに使用するメールアドレス。完全一致で判定します。複数指定した場合はOR条件となります。 |
added_date_from | query | 任意 | date | 友だち追加日の開始日。フォーマットは YYYY-MM-DD。 |
added_date_to | query | 任意 | date | 友だち追加日の終了日。フォーマットは YYYY-MM-DD。 |
異なるフィルタ同士はAND条件で組み合わされます。同一フィルタ内に複数の値を指定した場合(カンマ区切り、またはパラメータの繰り返し指定)は、OR条件で組み合わされます。
| Output field | Type | 説明 |
|---|---|---|
success | boolean | リクエストが正常に処理された場合は true。 |
request_id | string | エラー調査が必要な際にログを追跡するためのID。 |
data.total_items | integer | フィルタ条件を満たす友だちの総数。 |
data.total_pages | integer | 現在の limit に基づく総ページ数。 |
data.friend_detail[] | array<object> | 現在のページに含まれる友だち詳細の一覧。 |
└ added_time | date | 友だちがエルメに追加された日付。 |
└ friendtype | string | 友だちの種別:old または new。 |
└ line_friend_id | string | LINE Friend ID。 |
└ lmessage_friend_id | integer | エルメ内部の友だちID。 |
└ line_name | string | LINE名。 |
└ system_name | string|null | システム表示名(存在する場合)。 |
└ email | string|null | 友だち情報に保存されているメールアドレス(存在する場合)。 |
└ phone | string|null | 友だち情報に保存されている携帯電話(存在する場合)。 |
GET /v1/friends?page=1&limit=100&line_names=Tanaka,Sato&tag_ids=101,102&added_date_from=2026-07-01&added_date_to=2026-07-30
curl -G "https://api.lmes.jp/v1/friends" \ -H "X-LME-API-KEY: lme_live_sk_0123456789abcdef0123456789abcdef" \ --data-urlencode "page=1" \ --data-urlencode "limit=100" \ --data-urlencode "line_names=Tanaka,Sato" \ --data-urlencode "tag_ids=101,102" \ --data-urlencode "added_date_from=2026-07-01" \ --data-urlencode "added_date_to=2026-07-30"
{
"success": true,
"request_id": "req_20260730_0001",
"data": {
"total_items": 250,
"total_pages": 3,
"friend_detail": [
{
"added_time": "2026-07-30",
"friendtype": "new",
"line_friend_id": "Uxxxxxxxx",
"lmessage_friend_id": 12345,
"line_name": "Tanaka",
"system_name": "Tanaka CRM",
"email": "customer@example.com",
"phone": "09000000000"
}
]
}
}
3.2 友だち詳細の取得
1人の友だちの詳細情報(タグ、友だち情報、配信中のステップ配信)を取得します。
本APIは lmessage_friend_id のみを受け付けます。LINE Friend ID/メールアドレス/携帯電話は入力として受け付けません。LINE Friend IDしか分からない場合は、先に /friends で対象の lmessage_friend_id を特定してください。
| Parameter | 位置 | 必須 | Type | 説明 |
|---|---|---|---|---|
lmessage_friend_id | query | 必須 | integer | L Message Friend ID。1リクエストにつき1人の友だちのみ取得します。 |
| Output field | Type | 説明 |
|---|---|---|
success | boolean | リクエストが正常に処理された場合は true。 |
request_id | string | エラー調査が必要な際にログを追跡するためのID。 |
data.friend | object | 友だちの詳細。 |
└ lmessage_friend_id | integer | エルメ内部の友だちID。 |
└ line_friend_id | string | LINE Friend ID。 |
└ line_name | string|null | LINE名。 |
└ system_name | string|null | システム表示名(存在する場合)。 |
└ email | string|null | CRM側で顧客を紐付ける際に使用するメールアドレス。 |
└ phone | string|null | CRM側で顧客を紐付ける際に使用する携帯電話。 |
└ tags[] | array<object> | 友だちに付与されているタグ。id(integer)と name(string)を含みます。 |
└ friend_info[] | array<object> | 組み込みの基本フィールドとカスタムフィールドを含む友だち情報。 |
└ id | integer | 友だち情報フィールドID。 |
└ type | string | TEXT、POINT、DATE、SELECT のいずれか。 |
└ name | string | フィールド名。 |
└ value | string|number|null | 現在の値。POINT は number を返します(数値として解析できない場合は null)。DATE は YYYY-MM-DD 形式。それ以外は string です。 |
└ scenarios[] | array<object> | 友だちが配信中、または停止済みのステップ配信。 |
└ id | integer | ステップ配信ID。 |
└ name | string | ステップ配信名。 |
└ status | string | following(配信中)、completed(完了)または stopped(停止)。 |
GET /v1/friends/detail?lmessage_friend_id=12345
{
"success": true,
"request_id": "req_20260730_0003",
"data": {
"friend": {
"lmessage_friend_id": 12345,
"line_friend_id": "Uxxxxxxxx",
"line_name": "Tanaka",
"system_name": "Tanaka CRM", // ← 追加
"email": "customer@example.com",
"phone": "09000000000",
"tags": [
{ "id": 101, "name": "cart_abandonment" }
],
"friend_info": [
{ "id": -3, "type": "TEXT", "name": "email", "value": "customer@example.com" },
{ "id": 5001, "type": "POINT", "name": "point", "value": 20 }
],
"scenarios": [
{ "id": 88, "name": "cart_abandonment_reminder", "status": "following" }
]
}
}
}
4. マスタ取得
タグ、友だち情報フィールド、ステップ配信、テンプレート、対応ステータスの各IDを取得します。これらのIDは /do_action や /messages/template の入力値として使用します。
| Method | Path | 目的 |
|---|---|---|
| GET | /v1/tags | タグ一覧の取得 |
| GET | /v1/friend-info-fields | 友だち情報フィールド一覧の取得 |
| GET | /v1/scenarios | ステップ配信一覧の取得 |
| GET | /v1/templates | テンプレート一覧の取得 |
| GET | /v1/handling-statuses | 対応ステータス一覧の取得 |
4.1 タグ一覧の取得
/do_action で友だちにタグをつける/外す前に、タグIDを特定するため既存のタグ一覧を取得します。
| Parameter | 位置 | 必須 | Type | 説明 |
|---|---|---|---|---|
page | query | 任意 | integer | 取得するページ番号。デフォルトは1です。 |
limit | query | 任意 | integer | 取得する件数。デフォルトは100、最大500です。 |
| Output field | Type | 説明 |
|---|---|---|
data.tags[] | array<object> | 現在のページのタグ一覧。 |
└ id | integer | タグID。 |
└ name | string | タグ名。 |
└ friend_count | integer | このタグがついている友だちの数。 |
pagination | object | ページング情報:page、limit、total_items、total_pages、has_next。 |
GET /v1/tags?page=1&limit=100
{
"success": true,
"request_id": "req_20260730_0005",
"data": {
"tags": [
{ "id": 101, "name": "cart_abandonment", "friend_count": 25 }
]
},
"pagination": { "page": 1, "limit": 100, "total_items": 36, "total_pages": 1, "has_next": false }
}
4.2 友だち情報フィールド一覧の取得
/do_action で更新する友だち情報のフィールドIDを特定するために使用します。組み込み(標準)フィールドは負のID、カスタムフィールドは正のIDを使用します。
| Parameter | 位置 | 必須 | Type | 説明 |
|---|---|---|---|---|
page | query | 任意 | integer | 取得するページ番号。デフォルトは1です。 |
limit | query | 任意 | integer | 取得する件数。デフォルトは100、最大500です。 |
| Output field | Type | 説明 |
|---|---|---|
data.fields[] | array<object> | フィールドの一覧。 |
└ field_id | integer | フィールドID。組み込みフィールドは負のID、カスタムフィールドは正のIDを使用します。 |
└ title | string | 表示用のフィールド名、または内部で使用する名称。 |
└ field_type | string | TEXT、POINT、DATE、SELECT のいずれか。 |
└ options[] | array<object>|null | field_type が SELECT の場合のオプション一覧(option_id、label)。 |
pagination | object | ページング情報:page、limit、total_items、total_pages、has_next。 |
GET /v1/friend-info-fields?page=1&limit=100
{
"success": true,
"request_id": "req_20260730_0009",
"data": {
"fields": [
{ "field_id": -3, "title": "email", "field_type": "TEXT", "options": null },
{ "field_id": 5001, "title": "purchase_count", "field_type": "POINT", "options": null },
{
"field_id": 5002,
"title": "member_rank",
"field_type": "SELECT",
"options": [
{ "option_id": 1, "label": "gold" },
{ "option_id": 2, "label": "silver" }
]
}
]
},
"pagination": { "page": 1, "limit": 100, "total_items": 48, "total_pages": 1, "has_next": false }
}
4.3 ステップ配信一覧の取得
ステップ配信一覧を取得し、/do_action で友だちのステップ配信を開始/停止する際に使用する scenario_id を特定します。
| Parameter | 位置 | 必須 | Type | 説明 |
|---|---|---|---|---|
page | query | 任意 | integer | 取得するページ番号。デフォルトは1です。 |
limit | query | 任意 | integer | 取得する件数。デフォルトは100、最大500です。 |
| Output field | Type | 説明 |
|---|---|---|
success | boolean | リクエストが正常に処理された場合は true。 |
request_id | string | エラー調査が必要な際にログを追跡するためのID。 |
data.scenarios[] | array<object> | ステップ配信の一覧。 |
└ scenario_id | integer | 開始/停止の操作に使用するステップ配信ID。 |
└ name | string | ステップ配信名。 |
└ followers_count | integer | 配信中の友だちの数。 |
└ completed_count | integer | 完了数。 |
└ dropped_count | integer | 離脱数。 |
pagination | object | ページング情報:page、limit、total_items、total_pages、has_next。 |
GET /v1/scenarios?page=1&limit=100
{
"success": true,
"request_id": "req_20260730_0013",
"data": {
"scenarios": [
{
"scenario_id": 88,
"name": "cart_abandonment_reminder",
"followers_count": 120,
"completed_count": 80,
"dropped_count": 5
}
]
},
"pagination": { "page": 1, "limit": 100, "total_items": 1, "total_pages": 1, "has_next": false }
}
4.4 テンプレート一覧の取得
テンプレートを送信する前に、対象のテンプレートIDを特定するために使用します。取得した template_id は /messages/template で指定します。
| Parameter | 位置 | 必須 | Type | 説明 |
|---|---|---|---|---|
page | query | 任意 | integer | 取得するページ番号。デフォルトは1です。 |
limit | query | 任意 | integer | 取得する件数。デフォルトは100、最大500です。 |
| Output field | Type | 説明 |
|---|---|---|
success | boolean | リクエストが正常に処理された場合は true。 |
request_id | string | エラー調査が必要な際にログを追跡するためのID。 |
data.templates[] | array<object> | テンプレートの一覧。 |
└ template_id | integer | 送信に使用するテンプレートID。 |
└ name | string | テンプレート名。 |
pagination | object | ページング情報:page、limit、total_items、total_pages、has_next。 |
GET /v1/templates?page=1&limit=100
{
"success": true,
"request_id": "req_20260730_0021",
"data": {
"templates": [
{ "template_id": 7001, "name": "shipping_complete_notice" },
{ "template_id": 7002, "name": "review_request" }
]
},
"pagination": { "page": 1, "limit": 100, "total_items": 24, "total_pages": 1, "has_next": false }
}
4.5 対応ステータス一覧の取得
チャットの対応ステータスをCRMと同期するため、エルメ側の対応ステータスIDを取得します。このIDは、/do_action の handling_status アクション、および /conversations の handling_status_ids による絞り込みで使用します。
| Parameter | 説明 |
|---|---|
| なし | 本APIはパラメータを受け付けません。 |
| Output field | Type | 説明 |
|---|---|---|
success | boolean | リクエストが正常に処理された場合は true。 |
request_id | string | エラー調査が必要な際にログを追跡するためのID。 |
data[] | array<object> | 対応ステータスの一覧。 |
└ id | integer | 同期に使用する対応ステータスID。 |
└ name | string | 対応ステータス名。 |
GET /v1/handling-statuses
{
"success": true,
"request_id": "req_20260730_0023",
"data": [
{ "id": 12, "name": "deal_in_progress" },
{ "id": 13, "name": "follow_up" }
]
}
5. メッセージ
指定した友だちへのメッセージ送信と、カンバセーションの取得を行います。送信系APIでは Idempotency-Key の付与を推奨します。
| Method | Path | 目的 |
|---|---|---|
| POST | /v1/messages/push | メッセージ送信(テキスト/メディア) |
| POST | /v1/messages/template | テンプレートメッセージの送信 |
| GET | /v1/conversations | カンバセーション一覧の取得 |
| GET | /v1/conversations/detail | 直近メッセージの取得 |
5.1 メッセージ送信(テキスト/メディア)
指定したLINEの友だちにメッセージを送信します。本APIは /messages/text と /messages/media を統合したAPIです。messages[] 配列にはテキストとメディアを混在させることができ、指定した順に送信されます。対応するメディア形式は image、video、audio のみです。
| 項目 | 制限 |
|---|---|
| 1リクエスト内のメッセージオブジェクト | 最大5件 |
| テキスト | 1オブジェクトあたり最大5,000文字 |
| メディアのURL | 最大2,000文字、HTTPS(TLS 1.2以上) |
| 元画像 | JPEG / PNG、最大10 MB |
| プレビュー画像 | JPEG / PNG、最大1 MB |
| 動画 | MP4、最大200 MB |
| 音声 | M4A、最大200 MB |
| Parameter | 位置 | 必須 | Type | 説明 |
|---|---|---|---|---|
friend_id | body | 必須 | integer|string | 送信先となる友だちのID。 |
id_type | body | 任意 | string | lmessage_friend_id または line_friend_id。デフォルトは lmessage_friend_id です。 |
messages[] | body | 必須 | array<object> | 送信するメッセージの配列。テキストとメディアを混在させることができ、指定した順に送信されます。最大5オブジェクトです。 |
└ type | body | 必須 | string | text / image / video / audio |
└ text | body | 条件付き | string | type=text の場合のテキスト本文。最大5,000文字。 |
└ url | body | 条件付き | string | type=image/video/audio の場合のメディアURL。外部からアクセス可能なHTTPS URL(TLS 1.2以上、最大2,000文字)。 |
└ preview_url | body | 任意 | string | image / video 用のプレビュー画像URL(JPEG/PNG、最大1 MB)。未指定の場合、エルメは元のURLをプレビューとして使用します。 |
└ duration | body | 条件付き | integer | 音声ファイルの再生時間(ミリ秒)。type=audio の場合は必須です。 |
mark_confirmed | body | 任意 | boolean | 送信後にチャットを確認済みとして扱うかどうか。 |
Idempotency-Key | header | 推奨 | string | 外部システムが同一リクエストをリトライした際の重複処理を防止するためのキー。 |
| Output field | Type | 説明 |
|---|---|---|
success | boolean | リクエストが正常に処理された場合は true。 |
request_id | string | エラー調査が必要な際にログを追跡するためのID。 |
POST /v1/messages/push
Idempotency-Key: push-12345-20260730
{
"friend_id": 12345,
"id_type": "lmessage_friend_id",
"messages": [
{"type": "text", "text": "お問い合わせいただきありがとうございます。ご案内資料をお送りいたします。"},
{"type": "image", "url": "https://example.com/images/guide.jpg", "preview_url": "https://example.com/images/guide_preview.jpg"},
{"type": "video", "url": "https://example.com/videos/intro.mp4", "preview_url": "https://example.com/videos/intro_preview.jpg"},
{"type": "audio", "url": "https://example.com/audio/guide.m4a", "duration": 60000} // ← .mp3 から修正
],
"mark_confirmed": true
}
curl -X POST "https://api.lmes.jp/v1/messages/push" \
-H "X-LME-API-KEY: lme_live_sk_0123456789abcdef0123456789abcdef" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: push-12345-20260730" \
-d '{
"friend_id": 12345,
"id_type": "lmessage_friend_id",
"messages": [
{"type": "text", "text": "ご案内資料をお送りいたします。"}
],
"mark_confirmed": true
}'
{
"success": true,
"request_id": "req_20260730_0018"
}
5.2 テンプレートメッセージの送信
指定した友だちに既存のテンプレートを送信します。templates[] 配列を使用し、1リクエストで最大5件のテンプレートを送信できます。テンプレートIDは /templates から取得します。
| Parameter | 位置 | 必須 | Type | 説明 |
|---|---|---|---|---|
friend_id | body | 必須 | integer|string | 送信先となる友だちのID。 |
id_type | body | 任意 | string | lmessage_friend_id または line_friend_id。デフォルトは lmessage_friend_id です。 |
templates[] | body | 必須 | array<object> | 送信するテンプレートの配列。指定した順に送信され、最大5件まで指定できます。 |
└ template_id | body | 必須 | integer | 送信するテンプレートID。/templates APIから取得します。 |
mark_confirmed | body | 任意 | boolean | 送信後にチャットを確認済みとして扱うかどうか。 |
Idempotency-Key | header | 推奨 | string | 外部システムが同一リクエストをリトライした際の重複処理を防止するためのキー。 |
| Output field | Type | 説明 |
|---|---|---|
success | boolean | リクエストが正常に処理された場合は true。 |
request_id | string | エラー調査が必要な際にログを追跡するためのID。 |
POST /v1/messages/template
Idempotency-Key: template-12345-7001-20260730
{
"friend_id": 12345,
"id_type": "lmessage_friend_id",
"templates": [
{"template_id": 7001},
{"template_id": 7002}
]
}
{
"success": true,
"request_id": "req_20260730_0019"
}
5.3 カンバセーション一覧の取得
LOAの1対1チャットにおけるカンバセーション一覧を取得します。並び順は、ブックマークしたカンバセーションを先頭に表示し、以降は最新のメッセージ順となります。確認/未確認、対応ステータス、友だちの名前、タグ、表示状態による絞り込みに対応しており、CRM側で返信待ちのカンバセーションや、特定の条件に該当するカンバセーションを検索する際に使用します。
| Parameter | 位置 | 必須 | Type | 説明 |
|---|---|---|---|---|
page | query | 任意 | integer | 取得するページ番号。デフォルトは1です。 |
limit | query | 任意 | integer | 取得する件数。デフォルトは100、最大500です。 |
confirm_status | query | 任意 | integer | 確認状態による絞り込み:0 = 確認済み、1 = 未確認(返信待ち)。 |
handling_status_ids | query | 任意 | integer | CSV | 対応ステータスによる絞り込み。1件または複数のステータスIDをカンマ区切りで指定でき(例:12,13)、OR条件で判定します。ステータスIDは /handling-statuses APIから取得します。 |
handling_status_names | query | 任意 | string | CSV | 対応ステータス名による絞り込み。完全一致で判定します(大文字・小文字を区別しません)。handling_status_ids とはOR条件で統合されます。 |
line_names | query | 任意 | string | CSV | LINE名またはシステム表示名による部分一致検索(大文字・小文字を区別しません)。複数指定した場合はOR条件となります。 |
tag_ids | query | 任意 | integer | CSV | 友だちのタグIDによる絞り込み。/tags APIから取得します。tag_names と統合して判定します。 |
tag_names | query | 任意 | string | CSV | タグ名による絞り込み。完全一致で判定します(大文字・小文字を区別しません)。 |
tag_mode | query | 任意 | string | 複数タグの組み合わせ方法:or(デフォルト — いずれか1つ以上のタグがついている友だち)または and(すべてのタグがついている友だち)。 |
display_status | query | 任意 | string | 1対1チャットにおける表示状態:display(デフォルト — 表示中のカンバセーションのみ)、hidden(非表示のカンバセーションのみ)、all(両方)。 |
異なるフィルタ同士はAND条件で組み合わされます。同一フィルタ内に複数の値を指定した場合はOR条件となります(タグのみ tag_mode に従います)。名称によるフィルタはカンマで値を区切るため、名称自体にカンマを含む場合はIDによるフィルタをご利用ください。
| Output field | Type | 説明 |
|---|---|---|
success | boolean | リクエストが正常に処理された場合は true。 |
request_id | string | エラー調査が必要な際にログを追跡するためのID。 |
data.conversations[] | array<object> | ページごとのカンバセーション一覧。ブックマークしたカンバセーションを先頭に、以降は最新のメッセージ順に並びます。 |
└ lmessage_friend_id | integer | L Message Friend ID。/conversations/detail、/friends/detail、/do_action で使用します。 |
└ line_friend_id | string | 友だちの LINE user ID。 |
└ line_name | string | LINE名。 |
└ system_name | string|null | システム表示名(存在する場合)。 |
└ last_message | string | 最新メッセージの内容(要約表示)。 |
└ last_message_date | datetime | 最新メッセージの日時。 |
└ confirm_status | string | 確認状態:read(確認済み)または unread(未確認)。 |
└ handling_status | object|null | 現在の対応ステータス {id, name}。未設定の場合は null。 |
pagination | object | {page, limit, total_items, total_pages, has_next}。 |
GET /v1/conversations?page=1&limit=100&confirm_status=1&handling_status_ids=12,13&tag_names=vip,cart_abandonment&tag_mode=or
curl -G "https://api.lmes.jp/v1/conversations" \ -H "X-LME-API-KEY: lme_live_sk_0123456789abcdef0123456789abcdef" \ --data-urlencode "page=1" \ --data-urlencode "limit=100" \ --data-urlencode "confirm_status=1" \ --data-urlencode "handling_status_ids=12,13" \ --data-urlencode "tag_names=vip,cart_abandonment" \ --data-urlencode "tag_mode=or"
{
"success": true,
"request_id": "req_20260916_0025",
"data": {
"conversations": [
{
"lmessage_friend_id": 12345,
"line_friend_id": "U1234abcd...",
"line_name": "Tanaka",
"system_name": "Tanaka CRM",
"last_message": "こんにちは",
"last_message_date": "2026-09-16T10:00:00+09:00",
"confirm_status": "unread",
"handling_status": { "id": 12, "name": "deal_in_progress" }
}
]
},
"pagination": { "page": 1, "limit": 100, "total_items": 36, "total_pages": 1, "has_next": false }
}
5.4 直近メッセージの取得
CRMやオートメーションツールがカンバセーションの文脈を確認できるよう、1人の友だちについて直近100件のメッセージを取得します。
| 項目 | 制限 |
|---|---|
| メッセージ件数 | 直近100件まで |
| チャット履歴の対象期間 | LOAの契約種別によって異なります。無料LOAでは直近180日、有料LOAでは直近365日(12か月)まで取得できます。この期間より古いメッセージは返却されません。 |
| Parameter | 位置 | 必須 | Type | 説明 |
|---|---|---|---|---|
lmessage_friend_id | query | 必須 | integer | カンバセーションを取得する L Message Friend ID。 |
| Output field | Type | 説明 |
|---|---|---|
success | boolean | リクエストが正常に処理された場合は true。 |
request_id | string | エラー調査が必要な際にログを追跡するためのID。 |
data.lmessage_friend_id | integer | カンバセーションを取得した L Message Friend ID。 |
data.messages[] | array<object> | 取得可能なチャット履歴の期間内における、直近100件までのメッセージの配列(「制限」参照)。 |
└ delivery_date | datetime | メッセージの送受信日時。 |
└ sender | string | friend または LINE_OA。 |
└ message_type | string | メッセージの種別:text、image、video、file、sticker、template など。 |
└ data | string|array|object|null | message_type に応じて正規化したメッセージ内容を返します。text およびメディア(image/video/audio/file)は string(テキストまたはURL)、template/scenario/event/broadcast/action は array [{type,content}]、pdf/予約/ステップ配信イベントは object で返します。内部フィールド(image_server、thumbnail_path、from など)は除外して返します。 |
data.handling_status | object|null | カンバセーションの現在の対応ステータス(id、name)。 |
data.display_status | string | display または hidden。 |
data.block_status | string | blocked、block または normal。 |
data.favorite | string | ブックマークの状態:yes または no。 |
GET /v1/conversations/detail?lmessage_friend_id=12345
{
"success": true,
"request_id": "req_20260730_0022",
"data": {
"lmessage_friend_id": 12345,
"messages": [
{
"delivery_date": "2026-07-30T13:00:00+09:00",
"sender": "friend",
"message_type": "text",
"data": "相談したいのですが"
},
{
"delivery_date": "2026-07-30T13:00:05+09:00",
"sender": "LINE_OA",
"message_type": "template",
"data": [
{ "type": "text", "content": "お問い合わせいただきありがとうございます。" },
{ "type": "image", "content": "https://.../guide.jpg" }
]
},
{
"delivery_date": "2026-07-30T13:00:08+09:00",
"sender": "LINE_OA",
"message_type": "pdf",
"data": { "file_name": "doc.pdf", "file_size": 67209, "url": "https://.../doc.pdf", "file_name_original": "document.pdf" }
}
],
"handling_status": { "id": 12, "name": "deal_in_progress" }, // ← compliant_statuses から改称
"display_status": "display",
"block_status": "normal",
"favorite": "yes"
}
}
6. アクション
友だちに対する更新操作は、すべて /do_action に統合されています。複数の友だちに対して、複数のアクションを1リクエストで実行できます。
| Method | Path | 目的 |
|---|---|---|
| POST | /v1/do_action | 友だち一括アクション |
6.1 友だち一括アクション
1リクエストで、複数の友だちに対して1つ以上のアクションを実行します。本APIは、次の個別APIを統合したものです:/update-tag、/friend-info-field-update、/operate-scenarios、/change-handling-statuses、/change-block-statuses、/change-favorite-statuses。
- リクエストには、友だちIDの配列(
lmessage_friend_ids[])とアクションの配列(actions[])を指定します。 - 各アクションは、
lmessage_friend_ids[]に含まれるすべての友だちに適用され、指定した順に順次実行されます。 - 各アクションは
type(アクションの種別)+action(操作)+ 種別ごとの固有パラメータで構成されます。構造は、エルメで現在使用しているアクション体系に準拠しています。
| Parameter | 位置 | 必須 | Type | 適用対象 | 説明 |
|---|---|---|---|---|---|
lmessage_friend_ids[] | body | 必須 | array<integer> | 共通 | 操作対象となる L Message Friend ID の一覧。1リクエストあたり100人以内を推奨します。 |
actions[] | body | 必須 | array<object> | 共通 | 実行するアクションの一覧。指定した順に順次実行されます。1リクエストあたり10件以内を推奨します。 |
└ type | body | 必須 | string | 共通 | アクションの種別:tag friend_info scenario handling_status block favorite confirm_status |
└ action | body | 必須 | string | 共通 | 実行する操作。指定可能な値は type ごとに異なります(アクション分類表を参照)。 |
└ tag_ids[] | body | 条件付き | array<integer> | tag | add/remove の対象となるタグIDの一覧。/tags APIから取得します。 |
└ field_id | body | 条件付き | integer | friend_info | 友だち情報フィールドID。組み込みフィールドは負のID、カスタムフィールドは正のIDを使用します。/friend-info-fields APIから取得します。 |
└ value | body | 条件付き | string | friend_info | set point_replace point_plus point_minus の際に更新する値。TEXTはテキスト、DATEは YYYY-MM-DD、POINTは数値を使用します。clear today point_clear の場合は不要です。 |
└ option_id | body | 条件付き | integer | friend_info | SELECTフィールドを set する際のオプションID。/friend-info-fields APIの options[] から取得します。 |
└ scenario_id | body | 条件付き | integer | scenario | start/resume で操作するステップ配信ID。stop の場合は不要です。/scenarios APIから取得します。 |
└ start_from | body | 条件付き | integer | scenario | ステップ配信内の開始日。resume の場合にのみ使用します。例:3 を指定すると3日目から再開します。start は常にステップ配信の先頭から開始します。 |
└ handling_status_id | body | 条件付き | integer | handling_status | attach の際に紐付ける対応ステータスID。detach の場合は不要です。/handling-statuses APIから取得します。 |
Idempotency-Key | header | 推奨 | string | 共通 | 外部システムが同一リクエストをリトライした際の重複処理を防止するためのキー。 |
| Output field | Type | 説明 |
|---|---|---|
success | boolean | リクエストが正常に処理された場合は true。 |
request_id | string | エラー調査が必要な際にログを追跡するためのID。 |
POST /v1/do_action
Idempotency-Key: do-action-20260730-001
{
"lmessage_friend_ids": [12345, 12346],
"actions": [
{ "type": "tag", "action": "add", "tag_ids": [101] },
{ "type": "friend_info", "action": "point_plus", "field_id": 5001, "value": "10" },
{ "type": "scenario", "action": "start", "scenario_id": 88 },
{ "type": "handling_status", "action": "attach", "handling_status_id": 12 },
{ "type": "block", "action": "hide" },
{ "type": "favorite", "action": "add" },
{ "type": "confirm_status", "action": "confirm" } // ← 追加
]
}
curl -X POST "https://api.lmes.jp/v1/do_action" \
-H "X-LME-API-KEY: lme_live_sk_0123456789abcdef0123456789abcdef" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: do-action-20260730-001" \
-d '{
"lmessage_friend_ids": [12345, 12346],
"actions": [
{ "type": "tag", "action": "add", "tag_ids": [101] }
]
}'
{
"success": true,
"request_id": "req_20260730_0024"
}
6.2 アクション分類表
| type | 目的 | 有効な action | 固有パラメータ |
|---|---|---|---|
tag | 友だちにタグをつける/外す | add remove | tag_ids[] |
friend_info | 友だち情報フィールドの更新 | set clear today point_replace point_plus point_minus point_clear | field_id value option_id |
scenario | ステップ配信の開始/停止/再開 | start stop resume | scenario_id start_from |
handling_status | チャットの対応ステータスの変更 | attach detach | handling_status_id |
block | 1対1チャットにおけるブロック・非表示状態の変更 | block unblock show hide | なし |
favorite | ブックマークをつける/外す | add remove | なし |
confirm_status | カンバセーションの確認/未確認状態の変更(対応ステータス handling_status とは異なります) | confirm unconfirm | なし |
7. Webhook転送
エルメから外部システムへデータを送信する機能です。管理画面の「Webhook転送」画面で、送信先URLとオン/オフを設定します。
7.1 2つの転送機能
エルメでは独立した2つの転送機能をご利用いただけます。各機能は送信先URLとオン/オフを個別に設定でき、一方の設定を変更しても、もう一方には影響しません。受信側では、どちらか一方のみを利用することも、異なるURLを設定して両方を利用することもできます。
| 転送機能 | 送信内容 | 送信タイミング | 認証 |
|---|---|---|---|
| LINE公式アカウントデータ転送 | LINE Platformからエルメへ届いたイベントをそのまま送信します(message、follow、unfollow、postback など)。 | エルメ側が当該イベントを受信した直後(通常は数秒以内) | 署名なし |
| L Messageデータ転送 | エルメ内で発生した tag または friend_info の操作を、events[] の形式で送信します。 | エルメ内で操作が完了した直後 | X-Lme-Signature ヘッダーあり |
転送機能を有効化した場合、エルメ側は有効化した時点以降に発生したイベントのみを転送します。それ以前の過去データが遡って送信されることはありません。受信側で過去データが必要な場合は、転送機能ではなく別途APIからご取得ください。
イベントごとに設定を再取得する処理を避けるため、エルメ側は転送設定を1分ごとに読み込む方式としています。そのため「Webhook転送」画面で「保存する」を押しても、変更内容は即時には反映されません。最大約1分の間、転送処理は変更前の設定で動作します。特に以下の3つのケースにご注意ください。
- 転送機能を有効化した直後:この待機時間中に発生したイベントは転送されない可能性があり、その場合エラー一覧にも表示されません(システム上はまだ無効の状態として扱われるためです)。先に有効化を行い、約1分お待ちいただいてから動作確認を開始してください。
- 転送機能を無効化した直後、または送信先URLを変更した直後:この待機時間中は、変更前の送信先にもリクエストが届く可能性があります。変更前のエンドポイントの停止は、1分以上経過してから実施してください。
- シークレットを再生成した直後:最も慎重な連携が必要なケースです。詳細はシークレットのライフサイクルをご参照ください。
7.2 共通仕様
特に記載がない限り、2つの転送機能の両方に適用されます。
| 項目 | 仕様 | 備考 |
|---|---|---|
| メソッド | POST | 「Webhook転送」画面でご設定いただいた送信先URLへ送信します。 |
| Content-Type | application/json; charset=utf-8 | 文字コードはUTF-8です。 |
| 成功判定 | HTTP 2xx | エルメ側はレスポンスの内容を参照しません。 |
| タイムアウト | 10秒 | 接続および応答待ちの合計時間です。これを超えた場合、エルメ側は失敗として扱います。 |
| 失敗時の再送 | 最大3回、間隔は1分 | 再送の対象となるのは、タイムアウト(408、504を含む)またはHTTP 5xx の場合のみです。1回目は即時送信し、以降の2回は1分間隔で再送するため、1イベントの処理は最長で約2分となります。これ以外のエラーは再送せず、その時点でエラーを記録します。再送対象のエラーについては、3回すべて失敗した場合のみ、利用者が確認できるエラー記録を1件登録します(1件の障害につきエラー1行)。 |
| イベントの順序 | 保証しません | エルメ側は送信速度を優先し、友だち単位でのキューイングは行いません。同一の友だちに対する連続した2つの操作が、発生順と異なる順序で到着する可能性があるため、受信側での考慮が必要です。 |
| 重複送信 | 発生する可能性があります | リクエストが到達していても応答が失われた場合、エルメ側は失敗と判定して再送します。再送時は初回と同一の X-Lme-Delivery-Id を付与しますので、受信側ではこのヘッダーを用いて重複を判別し、破棄してください。 |
7.3 LINE公式アカウントデータ転送機能
LINE Platformからエルメへ届いたイベントを、加工や変換を行わずにそのまま転送します。
| 項目 | 内容 |
|---|---|
| 送信内容 | LINE PlatformからL Messageに送信されたリクエストボディを、そのまま送信します。 |
| メディアを含むイベント | 画像・動画・音声のイベントも転送対象です。ただし、ペイロードに含まれるのはコンテンツのIDのみで、ファイル本体は含まれません。ファイルを取得する場合は、受信側で自身のトークンを用いて LINE Content API を呼び出してください。 |
| 有効期限切れのアカウント | 削除済みのLINE公式アカウント、または有効期限切れから7日を超えたアカウントは、転送の対象外となります。設定はそのまま保持されるため、アカウントを復旧すれば再度ご利用いただけます。 |
| 認証 | 署名は付与されません。X-Lme-Delivery-Id と X-Lme-Timestamp は付与されます(リクエストヘッダー・認証)。 |
{
"destination": "Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"events": [
{
"type": "message",
"replyToken": "xxxxxxxxxxxxxxxx",
"source": { "type": "user", "userId": "Uxxxxxxxx" },
"timestamp": 1789000000000,
"message": { "id": "987654321", "type": "text", "text": "こんにちは" }
}
]
}
HTTP/1.1 200 OK
HTTP 2xxを返却いただければ十分です。レスポンスボディの内容は参照しません。
7.4 L Messageデータ転送機能
友だちに対して tag の付与・解除、または friend_info の登録・更新・削除が行われた際に、エルメのイベントとして転送します。エルメ側は events[] 配列を含むリクエストを1件送信します。各要素は発生した1件の操作を表し、操作内容と、友だちを識別する2つのフィールドで構成されます。
| Field | Type | 必須 | 適用対象 | 説明 |
|---|---|---|---|---|
events[] | array<object> | 必須 | 共通 | エルメ側が外部システムへ通知するイベントの配列。 |
└ lmessage_friend_id | integer | 必須 | 共通 | 操作対象となった友だちの L Message Friend ID。 |
└ line_friend_id | string | 必須 | 共通 | 操作対象となった友だちの LINE Friend ID。まれなケースとして、イベント送信前に当該友だちがエルメから削除された場合、本項目が空文字列となることがあります。その場合、受信側では lmessage_friend_id にて突合してください。 |
└ type | string | 必須 | 共通 | 操作の種別。Phase 1では tag または friend_info です。 |
└ action | string | 必須 | 共通 | tag:add remove / friend_info:set clear |
└ tag_id | integer | 条件付き | tag | 操作対象となったタグのID。 |
└ field_id | integer | 条件付き | friend_info | 操作対象となった友だち情報の項目ID。標準項目は負のID(標準フィールドID一覧)、カスタム項目は正のIDを使用します。 |
└ value | string | 条件付き | friend_info | 操作後の項目の値。action が clear の場合は本項目自体が含まれません。 |
| 項目 | 仕様 |
|---|---|
| 最大要素数 | 1リクエストあたり events[] は1,000要素まで。超過する場合は複数のリクエストに分割します。 |
| 1リクエストの範囲 | 1つのリクエストは必ず単一のLINE公式アカウントのデータのみで構成されます。複数アカウントのデータが混在することはありません。 |
| 実際の要素数 | 操作の発生頻度により変動し、1要素のみのリクエストとなる場合もあります。受信側ではいずれのケースも処理できる必要があります。 |
{
"events": [
{
"lmessage_friend_id": 12345,
"line_friend_id": "Uxxxxxxxx",
"type": "tag",
"action": "add",
"tag_id": 101
},
{
"lmessage_friend_id": 12345,
"line_friend_id": "Uxxxxxxxx",
"type": "friend_info",
"action": "set",
"field_id": -1,
"value": "山田太郎"
},
{
"lmessage_friend_id": 12345,
"line_friend_id": "Uxxxxxxxx",
"type": "friend_info",
"action": "clear",
"field_id": 5001
}
]
}
HTTP/1.1 200 OK
7.5 リクエストヘッダー・認証
認証ヘッダー(X-Lme-Signature)が付与されるのは L Messageデータ転送機能のみです。LINE公式アカウントデータ転送機能には付与されません。
| ヘッダー | 対象 | 内容 |
|---|---|---|
X-Lme-Signature | L Messageデータ転送機能のみ | 当該LINE公式アカウントのシークレットの値(whsec_… 形式)。文字列の比較のみで検証できます。 |
X-Lme-Delivery-Id | 両機能 | 1リクエストを識別するIDで、UUID形式です(例:3f2a8c10-9d4b-4e21-8a77-1c5e9b0d6f34)。同一内容の送信であれば3回の送信すべてで同じ値となり、内容が異なる場合は別の値となります。受信側の重複排除のキーとしてご利用ください。既に処理済みの値を再度受信した場合は、そのまま破棄し、HTTP 2xxを返却していただいて構いません。 |
X-Lme-Timestamp | 両機能 | エルメ側がリクエストを送信した時刻。エポックミリ秒形式です(例:1789000000000)。LINEのWebhookペイロード内の timestamp と同じ単位です。再送のたびに新しい値が入り、初回送信時の時刻ではありません。 |
Content-Type | 両機能 | application/json; charset=utf-8 |
POST /your/webhook/endpoint HTTP/1.1 Content-Type: application/json; charset=utf-8 X-Lme-Signature: whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx X-Lme-Delivery-Id: 3f2a8c10-9d4b-4e21-8a77-1c5e9b0d6f34 X-Lme-Timestamp: 1789000000000
7.6 シークレットのライフサイクル
| 項目 | 内容 |
|---|---|
| 値の出所 | 当該LINE公式アカウントの「署名シークレット」です。利用者は「Webhook転送」画面にて、シークレットの表示・コピー・再生成を行えます。 |
| 形式 | 接頭辞 whsec_ で始まる文字列です。 |
| 再生成時の挙動 | 管理画面上では、再生成と同時に旧シークレットが即時無効となり、猶予期間はありません。一方で転送処理は設定を1分ごとに読み込むため、再生成後の最大約1分間は、エルメ側が旧シークレットを付与して送信します。 |
シークレットを再生成される際は、受信側にて旧シークレットと新シークレットの両方を約2分間受け付けるようにし、その後に旧シークレットを破棄してください。即時に新シークレットのみへ切り替えた場合、待機時間中のリクエストが拒否され、双方に誤りがないにもかかわらずエラー一覧に記録されます。
7.7 送信失敗時の挙動
利用者は「Webhook転送」画面にてエラー一覧を確認できます。一覧は転送機能ごとに分かれています。
- 1回目:イベント発生時に即時送信します。タイムアウトまたは5xxで失敗した場合は1分待機して再送し、それ以外のエラーはその時点でエラーを記録します。
- 2〜3回目:最大2回まで、1分間隔で再送します。内容および
X-Lme-Delivery-Idは初回と同一です。いずれかで成功した場合は終了し、エラーは記録しません。 - 3回失敗後:3回すべてがタイムアウトまたは5xxとなった場合(初回から約2分後)、利用者が確認できるエラー記録を1件登録します。
| 発生状況 | ステータスコード | エルメ画面での表示 |
|---|---|---|
| 接続を確立できない、またはDNSエラー | — | 接続できませんでした |
| 応答待ちの超過(エルメ側が10秒以上待機、またはエンドポイント側がタイムアウトを示すコードを返却) | — / 408 / 504 | タイムアウト(10秒) |
| エンドポイントが認証を拒否した場合 | 401 / 403 | 認証エラー |
| パスが見つからない場合 | 404 | 転送先が見つかりません |
| エンドポイントが一時的に応答できない場合 | 503 | 転送先が一時的に応答できません |
| エンドポイント側でエラーが発生した場合 | その他の5xx | 転送先でエラーが発生しました |
| 上記以外のステータスコード | 実際のコード | 表示文言は未確定 |
エンドポイントが408または504を返却した場合、文言中の「10秒」は実際の状況と一致しません(エルメ側は速やかに応答を受け取っており、タイムアウトを申告しているのはエンドポイント側です)。この表示が紛らわしいと受信側でご判断される場合は、エラーコード列に値があるかどうかに応じて、2種類の文言に分けることも可能です。
7.8 受信側エンドポイント要件
- 10秒以内にHTTP 2xxを返却してください。これを超えた場合は失敗として扱われます。重い処理は非同期化し、受信後すぐに応答することを推奨します。
- 重複受信に対応してください。
X-Lme-Delivery-Idを重複排除のキーとしてご利用ください。 - 受信順序に依存しない実装としてください。必要に応じて
X-Lme-Timestampをご利用ください。 - L Messageデータ転送機能では、
X-Lme-Signatureの値を設定済みのシークレットと文字列比較して検証してください(再生成時は新旧2つを約2分間受け付け)。
8. 付録
8.1 標準フィールドID一覧
友だち情報の標準項目は負の field_id、カスタム項目は正の field_id を使用します。以下は、Webhook転送仕様に記載されている標準項目の一覧です。最新の全項目は /friend-info-fields から取得してください。
| field_id | エルメ上の項目名 | 内容 |
|---|---|---|
| -1 | システム表示名 | エルメシステム上での表示名 |
| -2 | 携帯電話 | 携帯電話番号 |
| -3 | メールアドレス | メールアドレス |
| -4 | 生年月日 | 生年月日 |
| -6 | 都道府県 | 都道府県 |
| -7 | 郵便番号 | 郵便番号 |
| -8 | 市区町村名 | 市区町村名 |
| -9 | 町名/番地 | 町名・番地 |
| -10 | 建物名・部屋番号 | 建物名・部屋番号 |
8.2 制限値まとめ
| 対象 | 項目 | 制限値 |
|---|---|---|
| API 共通 | ページングの limit | デフォルト100 / 最大500 |
| API 共通 | レート制限(読み取り) | 300リクエスト/分(LOA単位) |
| API 共通 | レート制限(書き込み) | 60リクエスト/分(LOA単位) |
| API 共通 | Idempotency-Key | 最大100文字 |
| /messages/push | messages[] | 最大5オブジェクト |
| /messages/push | テキスト | 1オブジェクトあたり最大5,000文字 |
| /messages/push | メディアURL | 最大2,000文字 / HTTPS(TLS 1.2以上) |
| /messages/push | 元画像 / プレビュー画像 | JPEG・PNG 最大10 MB / 最大1 MB |
| /messages/push | 動画 / 音声 | MP4 最大200 MB / M4A 最大200 MB |
| /messages/template | templates[] | 最大5件 |
| /conversations/detail | 取得件数 | 直近100件 |
| /conversations/detail | 取得可能期間 | 無料LOA:180日 / 有料LOA:365日 |
| /do_action | lmessage_friend_ids[] | 1リクエストあたり100人以内を推奨 |
| /do_action | actions[] | 1リクエストあたり10件以内を推奨 |
| Webhook | タイムアウト | 10秒 |
| Webhook | 再送 | 最大3回 / 1分間隔(最長約2分) |
| Webhook | events[] | 1リクエストあたり最大1,000要素 |
| Webhook | 設定変更の反映 | 最大約1分 |