OpenClawSkills
GitHub
チャンネル • 5分で読める

LINE

LINE Messaging API プラグイン:導入、設定、使い方。

LINE は LINE Messaging API を介して OpenClaw と統合されます。このプラグインは gateway 上で webhook レシーバーとして動作し、channel access token と channel secret を使用して認証します。

ステータス:プラグイン経由でサポート。DM、グループ、メディア、位置情報、Flex メッセージ、テンプレートメッセージ、クイックリプライをサポート。リアクションとスレッドはサポートしていません。

Tutorial.step

プラグインのインストールが必要

LINE プラグインをインストールします:

Bash
openclaw plugins install @openclaw/line

ローカルインストール(git リポジトリから実行する場合):

Bash
openclaw plugins install ./extensions/line
Tutorial.step

セットアップ

1. LINE Developers に登録し、Console を開きます:

https://developers.line.biz/console/

2. Provider を作成(または選択)し、Messaging API チャンネルを追加します。

3. チャンネル設定から Channel access token と Channel secret をコピーします。

4. Messaging API 設定で Use webhook を有効にします。

5. Webhook URL を gateway アドレスに設定します(HTTPS が必要):

Terminal
https://gateway-host/line/webhook

gateway は LINE の webhook 検証(GET)とインバウンドイベント(POST)に応答します。

カスタムパスが必要な場合は、''channels.line.webhookPath'' または ''channels.line.accounts.''.webhookPath'' を設定し、URL をそれに合わせて更新します。

Tutorial.step

Configuration

Minimal configuration:

Json5
{
  channels: {
    line: {
      enabled: true,
      channelAccessToken: "LINE_CHANNEL_ACCESS_TOKEN",
      channelSecret: "LINE_CHANNEL_SECRET",
      dmPolicy: "pairing",
    },
  },
}

環境変数(デフォルトアカウントのみ):

- LINE_CHANNEL_ACCESS_TOKEN

- LINE_CHANNEL_SECRET

ファイルから token/secret を読み取る:

Json5
{
  channels: {
    line: {
      tokenFile: "/path/to/line-token.txt",
      secretFile: "/path/to/line-secret.txt",
    },
  },
}

複数アカウント:

Json5
{
  channels: {
    line: {
      accounts: {
        marketing: {
          channelAccessToken: "...",
          channelSecret: "...",
          webhookPath: "/line/marketing",
        },
      },
    },
  },
}
Tutorial.step

アクセス制御

LINE DM はデフォルトでペアリングを使用します。不明な送信者はペアリングコードを受け取り、承認されるまでメッセージは処理されません。

Bash
openclaw pairing list line
openclaw pairing approve line '<CODE>'

許可リストとポリシー:

- channels.line.dmPolicy:pairing | allowlist | open | disabled

- channels.line.allowFrom:DM が許可される LINE ユーザー ID

- channels.line.groupPolicy:allowlist | open | disabled

- channels.line.groupAllowFrom:グループのトリガーが許可される LINE ユーザー ID

- グループごとの上書き:''channels.line.groups.''.allowFrom''

LINE の ID は大文字と小文字を区別します。有効な ID 形式は通常次のとおりです:

- ユーザー:U + 16 進数 32 桁

- グループ:C + 16 進数 32 桁

- Room: R + 32 hex digits

Tutorial.step

メッセージの動作

- テキストは 5000 文字で分割されます。

- Markdown 形式は削除されます。コードブロックとテーブルは可能な場合に Flex カードに変換されます。

- ストリーミング返信はバッファリングされます。エージェントが動作している間、LINE はロード中アニメーション付きの完全な分割テキストを受け取ります。

- メディアダウンロード制限は channels.line.mediaMaxMb で制御されます(デフォルト 10MB)。

Tutorial.step

チャンネルデータ(リッチメッセージ)

channelData.line を使用して、クイックリプライ、位置情報、Flex カード、またはテンプレートメッセージを送信します。

Json5
{
  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 コマンドも提供します:

Terminal
/card info "Welcome" "Thanks for joining!"
Tutorial.step

トラブルシューティング

- Webhook 検証に失敗しました: Webhook URL が HTTPS であり、channelSecret が LINE Console と一致していることを確認してください。

- インバウンドイベントがありません: Webhook パスが channels.line.webhookPath と一致しており、gateway が LINE から到達可能であることを確認してください。

- メディアダウンロードエラー: メディアがデフォルト制限を超えている場合、channels.line.mediaMaxMb を増やしてください。