LINE(プラグイン)¶
LINE は LINE Messaging API を介して OpenClaw に接続します。本プラグインはゲートウェイ上で webhook レシーバーとして動作し、認証にはチャンネルアクセストークンとチャンネルシークレットを使用します。 プラグインはゲートウェイでWebhook 受信者として動作し、 認証のためにチャンネルアクセストークン+チャンネルシークレットを使用します。
ステータス: プラグイン経由でサポートされています。 ダイレクトメッセージ、グループチャット、メディア、ロケーション、Flex メッセージ、テンプレートメッセージ、およびクイック返信に対応しています。 リアクションとスレッド はサポートされていません。
プラグインが必要¶
LINE プラグインをインストールします。
openclaw plugins install @openclaw/line
ローカルチェックアウト(git リポジトリから実行する場合):
openclaw plugins install ./extensions/line
セットアップ¶
- LINE Developers アカウントを作成し、コンソールを開きます: https://developers.line.biz/console/
- プロバイダーを作成(または選択)し、Messaging API チャンネルを追加します。
- チャンネル設定から Channel access token と Channel secret をコピーします。
- Messaging API の設定で Use webhook を有効にします。
- webhook URL をゲートウェイのエンドポイントに設定します(HTTPS が必須):
https://gateway-host/line/webhook
ゲートウェイは LINE の webhook 検証(GET)および受信イベント(POST)に応答します。
カスタムパスが必要な場合は channels.line.webhookPath または
channels.line.accounts.<id>
カスタムパスが必要な場合は、channels.line.webhookPathまたはchannels.line.accounts.
設定¶
最小構成:
{
channels: {
line: {
enabled: true,
channelAccessToken: "LINE_CHANNEL_ACCESS_TOKEN",
channelSecret: "LINE_CHANNEL_SECRET",
dmPolicy: "pairing",
},
},
}
環境変数(デフォルトアカウントのみ):
LINE_CHANNEL_ACCESS_TOKENLINE_CHANNEL_SECRET
トークン/シークレットのファイル:
{
channels: {
line: {
tokenFile: "/path/to/line-token.txt",
secretFile: "/path/to/line-secret.txt",
},
},
}
複数アカウント:
{
channels: {
line: {
accounts: {
marketing: {
channelAccessToken: "...",
channelSecret: "...",
webhookPath: "/line/marketing",
},
},
},
},
}
アクセス制御¶
ダイレクトメッセージはデフォルトでペアリングします。 不明な送信者はペアリングコードを取得し、承認されるまで メッセージは無視されます。
openclaw pairing list line
openclaw pairing approve line <CODE>
許可リストとポリシー:
channels.line.dmPolicy:pairing | allowlist | open | disabledchannels.line.allowFrom: ダイレクトメッセージ用に許可された LINE ユーザー IDchannels.line.groupPolicy:allowlist | open | disabledchannels.line.groupAllowFrom: グループ用に許可された LINE ユーザー ID- グループごとの上書き:
channels.line.groups.<groupId>.allowFrom
LINE ID は大文字と小文字を区別します。有効な ID は次の形式です。 有効な ID は以下のようになります:
- ユーザー:
U+ 32 桁の 16 進数 - グループ:
C+ 32 桁の 16 進数 - ルーム:
R+ 32 桁の 16 進数
メッセージの挙動¶
- テキストは 5000 文字で分割されます。
- Markdown の書式は除去されます。コードブロックと表は可能な場合に Flex カードへ変換されます。
- ストリーミング応答はバッファリングされます。エージェントが処理中の間、LINE にはローディング アニメーション付きで完全なチャンクが送信されます。
- メディアのダウンロード数は
channels.line.mediaMaxMb(既定値 10)で制限されます。
チャンネルデータ(リッチメッセージ)¶
channelData.line を使用して、クイックリプライ、位置情報、Flex カード、またはテンプレート
メッセージを送信します。
{
text: "Here you go",
channelData: {
line: {
quickReplies: ["Status", "Help"],
location: {
title: "Office",
address: "123 Main St",
latitude: 35.681236,
longitude: 139.767125,
},
flexMessage: {
altText: "Status card",
contents: {
/* Flex payload */
},
},
templateMessage: {
type: "confirm",
text: "Proceed?",
confirmLabel: "Yes",
confirmData: "yes",
cancelLabel: "No",
cancelData: "no",
},
},
},
}
LINE プラグインには、Flex メッセージのプリセット用の /card コマンドも同梱されています。
/card info "Welcome" "Thanks for joining!"
トラブルシューティング¶
- Webhook の検証に失敗する: webhook URL が HTTPS であること、および
channelSecretが LINE コンソールと一致していることを確認してください。 - 受信イベントがない: webhook のパスが
channels.line.webhookPathと一致していること、 そしてゲートウェイが LINE から到達可能であることを確認してください。 - メディアのダウンロードエラー: メディアが既定の制限を超える場合は
channels.line.mediaMaxMbを引き上げてください。