OpenClaw

OpenClaw LINE チャンネル

メッセージング
普通

公式 Messaging API を使用して OpenClaw を LINE に接続します。このプラグインベースの統合により、AI アシスタントが LINE でメッセージの送受信を行えるようになります。LINE は日本、台湾、タイ、東南アジアで最も人気のあるメッセージングプラットフォームの一つです。OpenClaw は Webhook でイベントを受信し、Messaging API で応答します。Flex Message、テンプレートメッセージ、クイックリプライ、メディア共有などのリッチメッセージタイプに対応しています。

基本情報
難易度普通
カテゴリメッセージング
対応機能数3 / 6

LINE 対応機能

テキストメッセージ

対応

メディア・ファイル

対応

リアクション

非対応

スレッド

非対応

音声メッセージ

非対応

グループチャット

対応

LINE 前提条件

  • LINE Developers アカウント(developers.line.biz で無料作成可能)
  • LINE Developers Console で Provider と Messaging API チャンネルを作成済み
  • Messaging API チャンネル設定から取得したチャンネルアクセストークンとチャンネルシークレット
  • OpenClaw Gateway が稼働し、公開 HTTPS URL でアクセス可能(Webhook に必須)
  • LINE プラグインがインストール済み:openclaw plugins install @openclaw/line

LINE クイックセットアップ

1

LINE Messaging API チャンネルを作成

LINE Developers Console にログインし、Provider を作成(または既存のものを選択)してから、新しい Messaging API チャンネルを作成します。チャンネル設定ページで Channel ID、Channel secret を確認し、Channel access token を発行してください。

2

LINE プラグインをインストールして設定を追加

'openclaw plugins install @openclaw/line' を実行して LINE プラグインをインストールします。次に ~/.openclaw/openclaw.json に channelAccessToken と channelSecret を含む LINE チャンネルの設定を追加します。環境変数 LINE_CHANNEL_ACCESS_TOKEN と LINE_CHANNEL_SECRET も使用できます。

3

Webhook URL を設定

LINE Developers Console でチャンネルの Messaging API タブに移動します。Webhook URL を 'https://<your-gateway-host>/line/webhook' に設定し、「Webhook の利用」を有効にします。「検証」をクリックしてエンドポイントへの到達を確認します。LINE 公式アカウントマネージャーで自動応答メッセージとあいさつメッセージを無効にして、重複応答を防止してください。

4

テストメッセージを送信

Console に表示される QR コードをスキャンして LINE ボットを友だち追加します。ボットにメッセージを送信してください。デフォルトの pairing ポリシーを使用している場合は、ターミナルで 'openclaw pairing approve line <code>' を使用して送信者を承認してください。

LINE 設定例

config.json
{
  "channels": {
    "line": {
      "enabled": true,
      "channelAccessToken": "YOUR_CHANNEL_ACCESS_TOKEN",
      "channelSecret": "YOUR_CHANNEL_SECRET",
      "dmPolicy": "pairing"
    }
  }
}

LINE 詳細ドキュメント

アーキテクチャ概要

OpenClaw は公式の Messaging API を通じて LINE と統合します。LINE プラットフォームがイベント(メッセージ、フォロー、参加)を Gateway にプッシュし、OpenClaw が REST API で応答する Webhook ベースのアーキテクチャです。 フローは次の通りです:ユーザーがメッセージを送信 → LINE プラットフォーム → Gateway への Webhook POST → OpenClaw が AI で処理 → Messaging API で返信 → LINE プラットフォーム → ユーザーが応答を受信。 リバースエンジニアリングされたプロトコルとは異なり、Messaging API は LINE Corporation が公式にサポートしており、安定した、ドキュメント化されたエンドポイントと互換性が保証されています。OpenClaw は Webhook 署名検証(チャンネルシークレットを鍵とした HMAC-SHA256)を自動的に処理し、すべての受信イベントが正当であることを保証します。 LINE プラグインは 'openclaw plugins install @openclaw/line' で別途インストールされます。このモジュラーアーキテクチャにより、コア Gateway は軽量に保たれ、LINE 固有の機能は独立してメンテナンスされます。
Gateway は有効な SSL 証明書を持つ公開 HTTPS URL でアクセス可能である必要があります。自己署名証明書は LINE の Webhook システムでは受け付けられません。
マルチアカウント設定では、各アカウントにカスタム webhookPath を設定して、同じ Gateway 上の異なるエンドポイントでイベントを受信できます。

LINE Developers Console のセットアップ

LINE ボットのセットアップには、LINE Developers Console で適切なリソースを作成する必要があります: 1. Provider を作成 — あなたまたは組織を表します。1つの Provider に複数のチャンネルを含めることができます。 2. Messaging API チャンネルを作成 — Messaging API タイプを選択します(LINE Login ではありません)。必要な詳細情報を入力:チャンネル名、説明、カテゴリ、サブカテゴリ。 3. チャンネルアクセストークンを発行 — チャンネル設定の Messaging API タブで「発行」をクリックして長期有効なチャンネルアクセストークンを生成します。このトークンが API 呼び出しを認証します。 4. チャンネルシークレットを確認 — 基本設定タブにあります。Webhook 署名検証に使用されます。 5. Webhook を設定 — Messaging API タブで Webhook URL を Gateway の LINE エンドポイントに設定し、「Webhook の利用」を有効にします。 6. 自動応答を無効化 — LINE 公式アカウントマネージャー(Console からリンク)であいさつメッセージと自動応答を無効にして、AI ボットとの競合を防止します。 LINE は特定の ID 形式を使用します:ユーザー ID は 'U' + 32桁の16進文字、グループ ID は 'C' で始まり、ルーム ID は 'R' で始まります。
openclaw.json
{
  "channels": {
    "line": {
      "channelAccessToken": "YOUR_TOKEN",
      "channelSecret": "YOUR_SECRET"
    }
  }
}
チャンネルシークレットとアクセストークンは安全に管理してください。バージョン管理にコミットしないでください。本番環境では環境変数(LINE_CHANNEL_ACCESS_TOKEN、LINE_CHANNEL_SECRET)またはファイルベースのトークン(tokenFile、secretFile)を使用してください。

チャンネルアクセストークン

LINE は有効期間とユースケースが異なる4種類のチャンネルアクセストークンを提供しています: • 長期有効トークン — 有効期限なし。Console から発行。チャンネルあたり1つのみ存在可能で、再発行すると前のトークンは無効になります。セルフホストボットには最もシンプルなオプションです。 • 短期有効トークン(v2.1)— 最大30日で期限切れ。JWT アサーションを使用して API 経由で発行。チャンネルあたり最大30トークン。トークンローテーションが必要な本番デプロイメントに推奨。 • ステートレストークン — 15分で期限切れ。発行数に制限なし。取り消し不可。非常に短いトークン有効期間が必要な高セキュリティシナリオに適しています。 • 短期有効(レガシー)— 30日で期限切れ。チャンネルあたり最大30トークン。制限を超えると最も古いトークンが自動取り消しされます。 OpenClaw はすべてのトークンタイプをサポートしています。ほとんどのセルフホスト環境では、長期有効トークンが最もシンプルな選択肢です。設定で直接指定するか、LINE_CHANNEL_ACCESS_TOKEN 環境変数で設定してください。
トークンローテーションが必要な本番環境では、tokenFile 設定オプションを使用して、外部のトークンリフレッシュプロセスで更新されるファイルを指定してください。
トークンを頻繁に発行しすぎないでください。短期間に多数のトークンが作成されると、LINE が一時的に発行を制限する場合があります。

DM ポリシー

DM(ダイレクトメッセージ)ポリシーは、LINE ボットとの1対1チャットでやり取りできるユーザーを制御します。OpenClaw は4つのポリシーをサポートしています: • pairing(デフォルト)— ボットにメッセージを送信した新しいユーザーはランダムなペアリングコードを受け取ります。ターミナルで 'openclaw pairing approve line <code>' を使用して承認します。承認後は自由にチャットできます。コードは1時間後に期限切れとなり、最大3件の保留中のリクエストが許可されます。 • allowlist — allowFrom にリストされた LINE ユーザー ID のみがボットにメッセージを送信できます。それ以外はサイレントに無視されます。LINE ユーザー ID は 'U' + 32桁の16進文字の形式です。 • open — ボットを友だち追加してメッセージを送信した全員が応答を受け取ります。安全確認として allowFrom に '*' を追加する必要があります。 • disabled — DM 機能が完全に無効化されます。 ユーザーの LINE ID を確認するには、メッセージ送信時の Gateway ログを確認してください。各 Webhook イベントとともにソースの userId がログに記録されます。
openclaw.json
{
  "channels": {
    "line": {
      "dmPolicy": "allowlist",
      "allowFrom": ["U1234567890abcdef1234567890abcdef"]
    }
  }
}
LINE ユーザー ID は Provider ごとに一意です。同じユーザーでも異なる Provider では異なる ID を持ちます。allowFrom の ID が正しい Provider のものであることを確認してください。
'openclaw pairing list line' を使用して、すべての保留中のペアリングリクエストとそのコードを確認できます。

グループチャット管理

OpenClaw は設定可能なアクセス制御を備えた LINE のグループチャットとマルチパーソンチャットをサポートしています: • disabled(デフォルト)— すべてのグループおよびルームメッセージを無視 • open — すべてのグループメンバーからのメッセージに応答 • allowlist — 承認されたユーザー ID(groupAllowFrom で指定)のみがグループでボットをトリガー可能 LINE ボットがグループに参加すると 'join' イベントを受信します。グループ会話は DM から分離されており、各グループが独自の会話コンテキストと履歴を維持します。 LINE のグループ ID は 'C' + 32桁の16進文字の形式です。ルーム ID は 'R' + 32桁の16進文字を使用します。グループメッセージを受信した際の Gateway ログで確認できます。 注意:ボットはメンバーによってグループに追加される必要があります。LINE ボットは自らグループに参加することはできません。
openclaw.json
{
  "channels": {
    "line": {
      "groupPolicy": "open",
      "historyLimit": 50
    }
  }
}

リッチメッセージ:Flex とテンプレート

LINE はプレーンテキスト以外のリッチメッセージタイプをサポートしており、OpenClaw はそれらを活用しています: • Flex Message — JSON 構造を使用した高度にカスタマイズ可能なカードベースのレイアウト。OpenClaw は AI の応答内のコードブロックを可能な場合に自動的に Flex Message カードに変換します。'/card' コマンドを使用してプリセットの Flex テンプレートを生成することもできます。 • テンプレートメッセージ — ボタン、カルーセル、確認、画像カルーセルを含む構造化メッセージ。ユーザーに選択肢を提示するのに便利です。 • クイックリプライ — メッセージの下に表示される最大13個のアクションボタン。メッセージアクション、URI アクション、ポストバックアクション、日時ピッカー、カメラ/カメラロールアクション、位置情報アクションをサポートします。ユーザーが1つタップするとクイックリプライは消えます。 • スタンプ — LINE の特徴的な機能。ボットは packageId と stickerId を指定して公式スタンプを送信できます。API 経由で利用可能なのは LINE の公開された送信可能スタンプリストのスタンプのみです。 • 位置情報メッセージ — 住所ラベル付きで緯度/経度座標を共有します。 LINE はネイティブで Markdown をサポートしていないため、AI の応答から Markdown フォーマットは自動的に除去されます。コードブロックは読みやすさのために Flex カードに変換されます。
LINE Flex Message Simulator(Console で利用可能)を使用して、コーディング前にカスタム Flex レイアウトを設計・プレビューしてください。
クイックリプライは iOS および Android 版 LINE でのみサポートされています。デスクトップやウェブクライアントでは表示されません。

メディアと添付ファイル

OpenClaw は LINE 上の画像、動画、音声、ファイルを含むメディアファイルを処理します。ユーザーから受信したメディアコンテンツは Gateway によって自動的にダウンロードされ処理されます。 受信メディアは LINE のコンテンツ API から取得され、AI に処理(例:画像分析)のために渡されます。デフォルトの最大ファイルサイズは 10 MB(mediaMaxMb で設定可能)です。 送信メディアは Messaging API を通じてアップロードされます。LINE がサポートするメディア: • 画像 — JPEG および PNG、最大 10 MB • 動画 — MP4、最大 200 MB(一部のコンテキストでは最大1分) • 音声 — M4A、最大 200 MB LINE はメッセージ ID を使用するコンテンツ取得 API を使用しています。メディアコンテンツは Webhook ペイロードに直接含まれず、別途取得する必要があります。OpenClaw はこれを自動的に処理します。
openclaw.json
{
  "channels": {
    "line": {
      "mediaMaxMb": 10
    }
  }
}

Webhook セキュリティ

LINE は HMAC-SHA256 署名検証を使用して Webhook イベントの真正性を確認します。すべての Webhook リクエストには 'x-line-signature' ヘッダーが含まれ、チャンネルシークレットを鍵としてリクエストボディの HMAC-SHA256 ダイジェストを Base64 エンコードした値が格納されています。 OpenClaw は受信するすべての Webhook イベントに対してこの署名を自動的に検証します。検証に失敗した場合、イベントは 403 ステータスで拒否されます。これにより、なりすましや改ざんされたイベントの処理を防止します。 重要:署名は生のリクエストボディ文字列に対して計算されます。検証前に JSON をパース、デシリアライズ、または再フォーマットしないでください。OpenClaw はこれを正しく処理しますが、リバースプロキシやロードバランサーがリクエストボディを Gateway に到達する前に変更していないことを確認してください。
Webhook 検証が繰り返し失敗する場合は、channelSecret が LINE Developers Console(基本設定タブ)の値と一致しているか確認してください。
Console の「検証」ボタンを使用して Webhook エンドポイントをテストできます。空の events 配列を持つテストイベントが送信されます。

ローディングインジケーターと配信

OpenClaw は AI の応答生成中にローディングインジケーター(タイピングアニメーション)を送信します。LINE のローディングインジケーター API はチャット内で最大60秒間スピナーを表示し、ボットが処理中であることを視覚的にフィードバックします。 長い AI の応答に対しては、テキストがメッセージあたり 5,000 文字(LINE のメッセージサイズ制限)で自動的にチャンク分割されます。チャンク分割はユーザーには透過的で、連続する複数のメッセージを受信します。 ストリーミングは完了まで保留されます。LINE は一部の他のプラットフォームのようなストリーミングメッセージ配信をサポートしていません。完全な応答がまず生成され、その後1つまたは複数のメッセージとして送信されます。 LINE の Messaging API は1回のリプライで最大5つのメッセージオブジェクトの送信をサポートしています。OpenClaw は短いメッセージを可能な場合にまとめて配信を最適化します。
openclaw.json
{
  "channels": {
    "line": {
      "textChunkLimit": 5000,
      "chunkMode": "newline"
    }
  }
}

マルチアカウント設定

OpenClaw は単一の Gateway インスタンスで複数の LINE ボットアカウントの実行をサポートしています。各アカウントは独自の認証情報、Webhook パス、設定オーバーライドを持ちます。 これは異なる LINE アカウントで異なる AI パーソナリティを運用する場合や、同じインフラ上で本番環境とステージング環境のボットを分離する場合に便利です。 各アカウントは独自のパスで Webhook イベントを受信します:/line/<accountId>/webhook(デフォルトの /line/webhook の代わり)。各アカウントの LINE Developers Console で対応する Webhook URL を設定してください。
openclaw.json
{
  "channels": {
    "line": {
      "accounts": {
        "main": {
          "channelAccessToken": "TOKEN_1",
          "channelSecret": "SECRET_1",
          "webhookPath": "/line/main/webhook"
        },
        "support": {
          "channelAccessToken": "TOKEN_2",
          "channelSecret": "SECRET_2",
          "webhookPath": "/line/support/webhook"
        }
      }
    }
  }
}

LINE 設定リファレンス

enabled
Type: booleanDefault: true

LINE チャンネルの有効/無効を切り替え

channelAccessToken
Type: stringDefault: ""

LINE Messaging API チャンネルアクセストークン。環境変数 LINE_CHANNEL_ACCESS_TOKEN も使用可能

channelSecret
Type: stringDefault: ""

Webhook 署名検証用の LINE チャンネルシークレット。環境変数 LINE_CHANNEL_SECRET も使用可能

tokenFile
Type: stringDefault: ""

チャンネルアクセストークンを含むファイルのパス(インライン設定の代替)

secretFile
Type: stringDefault: ""

チャンネルシークレットを含むファイルのパス(インライン設定の代替)

dmPolicy
Type: stringDefault: "pairing"

ボットに DM を送信できるユーザーを制御。オプション:pairing、allowlist、open、disabled

allowFrom
Type: string[]Default: []

dmPolicy が allowlist の場合にボットにメッセージを送信できる LINE ユーザー ID(U + 32桁の16進文字)

dmHistoryLimit
Type: numberDefault: 50

会話ごとに AI コンテキストとして含める最近の DM メッセージ数

groupPolicy
Type: stringDefault: "disabled"

グループチャットポリシー。オプション:disabled、allowlist、open

groupAllowFrom
Type: string[]Default: []

グループでボットをトリガーできる LINE ユーザー ID(groupPolicy が allowlist の場合)

historyLimit
Type: numberDefault: 50

AI コンテキストに含める最大グループメッセージ数。0 で無効化

textChunkLimit
Type: numberDefault: 5000

チャンク分割前の送信メッセージあたりの最大文字数

chunkMode
Type: stringDefault: "length"

テキストのチャンクモード。オプション:length(ハード分割)、newline(段落対応)

mediaMaxMb
Type: numberDefault: 10

受信メディアファイルの最大サイズ(メガバイト)

webhookPath
Type: stringDefault: "/line/webhook"

このアカウントのカスタム Webhook パス(マルチアカウント設定で使用)

accounts.<id>.channelAccessToken
Type: stringDefault: ""

マルチアカウント設定でのアカウントごとのチャンネルアクセストークン

accounts.<id>.channelSecret
Type: stringDefault: ""

マルチアカウント設定でのアカウントごとのチャンネルシークレット

accounts.<id>.webhookPath
Type: stringDefault: "/line/<id>/webhook"

マルチアカウント設定でのアカウントごとの Webhook パス

configWrites
Type: booleanDefault: true

/config コマンドによるチャンネル設定のランタイム変更を許可

LINE よくある質問

LINE トラブルシューティング

LINE Console で Webhook 検証に失敗する

Gateway がインターネットからアクセスできない、URL が正しくない、または SSL 証明書の問題があります。

Gateway が公開 URL で稼働中かつアクセス可能であることを確認してください。URL が有効な SSL 証明書(自己署名ではない)を持つ 'https://<host>/line/webhook' であることを確認します。ファイアウォールルールとポートフォワーディングを確認してください。外部マシンから 'curl -X POST https://<host>/line/webhook' でテストしてください。
ボットを友だち追加したがメッセージに応答しない

Console で Webhook が有効になっていない、自動応答が干渉している、または送信者が pairing ポリシーで承認されていません。

LINE Developers Console の Messaging API タブで「Webhook の利用」が有効になっていることを確認してください。LINE 公式アカウントマネージャーで自動応答とあいさつメッセージの両方を無効にしてください。pairing ポリシーを使用している場合は、'openclaw pairing list line' で保留中のペアリングを確認し、送信者を承認してください。
返信送信時にエラー 401 Unauthorized が発生する

チャンネルアクセストークンが無効、期限切れ、または取り消されています。

LINE Developers Console でチャンネルの Messaging API タブに移動し、新しいチャンネルアクセストークンを発行してください。OpenClaw の設定または LINE_CHANNEL_ACCESS_TOKEN 環境変数を新しいトークンで更新します。トークンローテーションを使用している場合は、リフレッシュプロセスが正しく動作しているか確認してください。
メッセージは受信されるが返信に「無効なリプライトークン」と表示される

LINE のリプライトークンは Webhook イベント送信後1分で期限切れになります。AI の処理に時間がかかるとトークンが無効になります。

これは LINE プラットフォームの制限です。OpenClaw はリプライトークンが期限切れになった場合のフォールバックとしてプッシュメッセージを使用します。channelAccessToken にプッシュメッセージの権限があり、月間プッシュメッセージクオータを超過していないことを確認してください。
受信 Webhook で署名検証エラーが発生する

設定の channelSecret が LINE Developers Console のチャンネルシークレットと一致していないか、リバースプロキシがリクエストボディを変更しています。

channelSecret の値が LINE Developers Console の基本設定タブに表示される「チャンネルシークレット」と一致しているか確認してください。リバースプロキシ(nginx、Apache)を使用している場合は、生のリクエストボディが変更なしで転送されることを確認してください。Content-Type が application/json として保持されていることを確認します。