LINE
ZeroClawはMessaging APIを通じてLINEに対応しており、組み込みのWebhookサーバーでメッセージを受信し、Reply APIで返信します(リプライトークンが失効している場合はPush APIにフォールバックします)。
エージェントと対話できるユーザー
受信側の送信者は、バインドされたエージェントに対して解決されたピアセットに照らして制御されます。これはエージェントが所属する peer_groups 設定から導出されます。照合では先頭の @ を取り除き、チャネルのネイティブな送信者識別子に対して大文字・小文字を区別せずに行われます。空のセットはすべてを拒否し、"*" を含むセットはすべてを受け入れます。それ以外の場合は、リストに記載された外部ピア(およびピアエージェント)のみが受け入れられます。これはゲートウェイのペアリング(gateway.require_pairing)とは別物であり、ペアリングはチャットチャネルの送信者ではなく HTTP/WebSocket クライアントを認証します。
line のピアグループでは、channel を line に設定し、許可する送信者を external_peers に列挙します(line の場合は LINE ユーザー ID。["*"] は誰でも受け付けます)。必要に応じて、エージェント間ディスパッチ用のピア agents、ignore ブロックリスト、output_modality(mirror、voice、または text)を指定できます。フィールドのリファレンスについては Peer Groups を参照してください。
この設定の場所:
LINE はピアセットの上に dm_policy と group_policy のレイヤーを重ねます。下記の アクセスポリシー を参照してください。ポリシーが allowlist に設定されている場合、ピアセットがallowlistになります。
前提条件
- LINE Developers Consoleアカウント。
- LINEのサーバーから到達可能なパブリックHTTPSエンドポイント (ローカル開発ではngrok)。
- LINEチャネルサポートが有効になった状態でビルドされたZeroClaw (
zeroclaw-channelsクレート上のchannel-line機能)。
1. LINEボットを作成する
- LINE Developers Consoleにログインします。
- プロバイダーを作成します (または既存のものを使用)。
- そのプロバイダーの下に新しいメッセージングAPIチャネルを作成します。
- チャネル設定から、2つの値を集めます:
- チャネルアクセストークン: Messaging API タブ → 長期間有効なトークンを発行します。
- チャネルシークレット: 基本設定タブ。
2. ZeroClawを設定する
channel_access_token 🔑
長期有効なチャネルアクセストークン(LINE Developers Console から取得)。Reply API と Push API のフォールバックの両方で使用されます。空の場合は環境変数 LINE_CHANNEL_ACCESS_TOKEN にフォールバックします。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/channels/line を開き、channels.line.<alias>.channel_access_token フィールドを設定してください。
zerocode
Config ペインで、channels.line.<alias>.channel_access_token フィールドを設定します。
zeroclaw config
zeroclaw config set channels.line.<alias>.channel_access_token # マスクされた入力、暗号化して保存
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_channels__line__<alias>__channel_access_token=
channel_secret 🔑
チャネルシークレット(LINE Developers Consoleから取得)。受信WebhookのX-Line-Signatureヘッダーを検証するために使用します。空の場合はLINE_CHANNEL_SECRET環境変数にフォールバックします。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/channels/line を開き、channels.line.<alias>.channel_secret フィールドを設定します。
zerocode
Config ペインで、channels.line.<alias>.channel_secret フィールドを設定します。
zeroclaw config
zeroclaw config set channels.line.<alias>.channel_secret # マスクされた入力、暗号化して保存
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_channels__line__<alias>__channel_secret=
dm_policy
DM(1対1チャット)アクセスポリシー。デフォルト: pairing。 - open: 全員に応答する - pairing: 初回接続時に一度だけ /bind <code> ハンドシェイクを要求する - allowlist: allowed_users に列挙されたユーザーIDにのみ応答する
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/channels/line を開いて、channels.line.<alias>.dm_policy フィールドを設定します。
zerocode
Config ペインで、channels.line.<alias>.dm_policy フィールドを設定します。
zeroclaw config
zeroclaw config set channels.line.<alias>.dm_policy <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_channels__line__<alias>__dm_policy=
excluded_tools
このチャネルのツール仕様から除外されるツールです。設定すると、これらのツールはこのチャネル経由で応答する際にモデルに公開されません。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/channels/line を開き、channels.line.<alias>.excluded_tools フィールドを設定します。
zerocode
Config ペインで、channels.line.<alias>.excluded_tools フィールドを設定します。
zeroclaw config
zeroclaw config set channels.line.<alias>.excluded_tools <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_channels__line__<alias>__excluded_tools=
group_policy
グループ/複数人チャットのポリシー。デフォルト: mention。- open: すべてのメッセージに応答する - mention: @メンションされたときのみ応答する - disabled: すべてのグループメッセージを無視する
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/channels/line を開き、channels.line.<alias>.group_policy フィールドを設定します。
zerocode
Config ペインで、channels.line.<alias>.group_policy フィールドを設定します。
zeroclaw config
zeroclaw config set channels.line.<alias>.group_policy <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_channels__line__<alias>__group_policy=
proxy_url
チャンネルごとのプロキシURL(http、https、socks5、socks5h)。このチャンネルに対してのみ、グローバルな [proxy] 設定を上書きします。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/channels/line を開き、channels.line.<alias>.proxy_url フィールドを設定します。
zerocode
Config ペインで、channels.line.<alias>.proxy_url フィールドを設定します。
zeroclaw config
zeroclaw config set channels.line.<alias>.proxy_url <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_channels__line__<alias>__proxy_url=
sender_name
LINEのチャット吹き出しで送信者として表示される表示名。未設定または空の場合、デフォルトは "AI" です。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/channels/line を開き、channels.line.<alias>.sender_name フィールドを設定します。
zerocode
Config ペインで、channels.line.<alias>.sender_name フィールドを設定します。
zeroclaw config
zeroclaw config set channels.line.<alias>.sender_name <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_channels__line__<alias>__sender_name=
webhook_port
埋め込み Webhook サーバーがリッスンする TCP ポート。デフォルト: 8443。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/channels/line を開いて、channels.line.<alias>.webhook_port フィールドを設定してください。
zerocode
Config ペインで、channels.line.<alias>.webhook_port フィールドを設定します。
zeroclaw config
zeroclaw config set channels.line.<alias>.webhook_port <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_channels__line__<alias>__webhook_port=
[channels.line.<alias>] の下で LINE チャネルを設定し、少なくとも channel_access_token と channel_secret を指定します。dm_policy / group_policy のユーザー向けの動作については、以下の §6 で説明します。
設定ファイルの代わりに環境変数を使用する
認証情報を設定ファイルに保存したくない場合は、トークンフィールドを省略し、代わりに環境変数としてエクスポートしてください:
sh
export LINE_CHANNEL_ACCESS_TOKEN="your-channel-access-token"
export LINE_CHANNEL_SECRET="your-channel-secret"
環境変数は空の設定フィールドより優先されます。
3. Webhookエンドポイントを公開する
LINEはWebhook URLにPOSTしてメッセージを配信します。埋め込みサーバーは設定されたwebhook_portでリッスンします。
ローカル開発の場合(ngrok):
sh
ngrok http 8443
ngrokが提供するhttps:// URL(例:https://abc123.ngrok.io)をコピーします。
本番環境の場合: HTTPSリバースプロキシ(nginx、Caddy等)の後ろでポート8443(または設定したポート)を公開するか、TLS証明書を備えたサーバーに直接デプロイしてください。
4. LINE Developers ConsoleでWebhookを登録する
- チャネル → Messaging APIタブ → Webhook設定に移動します。
- Webhook URLを
https://your-domain.com/line/webhookに設定します。 - Webhookを使用するをオンに切り替えます。
- Verify をクリックすると、LINE がテストリクエストを送信します。検証を成功させるには、ZeroClaw が実行されている必要があります。
5. ZeroClawを開始する
sh
zeroclaw daemon
スタートアップログシグナル:
LINE: webhook server listening on http://0.0.0.0:8443/line/webhook
6. アクセスポリシー
DM(1対1チャット): dm_policy
| 値 | 動作 |
|---|---|
pairing(デフォルト) | ボットはユーザーが/bind <code>を送信するまですべてのDMを無視します。ペアリングコードはZeroClawログのスタートアップ時に表示されます。 |
open | ボットはすべてのDMに即座に応答します。 |
allowlist | ボットは、エージェントのピアセットに含まれる LINE ユーザー ID のみに応答します(エージェントと会話できる相手を参照)。 |
ペアリングワークフロー:
- ZeroClawはスタートアップ時にログにペアリングコードを出力します。
- ユーザーはボットとのLINE DMを開き、
/bind <code>を送信します。 - ZeroClawはペアリングを確認し、後続のDMが受け入れられます。
グループ/複数人チャット: group_policy
| 値 | 動作 |
|---|---|
mention(デフォルト) | ボットは明示的に@メンションされた場合にのみ応答します。 |
open | ボットはグループ内のすべてのメッセージに応答します。 |
disabled | ボットはグループメッセージを完全に無視します。 |
7. オーディオ/音声メッセージトランスクリプション(オプション)
文字起こしが有効な場合(グローバルな [transcription] 設定経由、Config reference を参照)、LINE の audio メッセージイベントは LINE Content API から自動的にダウンロードされ、モデルに渡される前に文字起こしされます。
最大受け入れオーディオサイズは25 MBです。より大きいファイルはログ警告とともに黙って スキップされます。
8. トラブルシューティング
| 症状 | 考えられる原因 | 対応 |
|---|---|---|
| LINE検証が失敗する | ZeroClawが実行されていない、またはポートに到達できない | プロセスが起動し、ポートがインターネットからアクセス可能であることを確認します |
| ボットはDMに返信しません | dm_policy = pairing でユーザーが /bind を実行していない | ユーザーは先に /bind <code> を送信するか、dm_policy = open に切り替える必要があります |
| ボットはグループで返信しません | group_policy = mention でメッセージに @mention がない | ボットに @mention するか、group_policy = open に切り替えます |
| 返信はプッシュメッセージとして到着します | 返信トークンの有効期限が切れた(約30秒のウィンドウ) | フォールバック動作は想定通りであり、対応は不要です |
| 音声メッセージは無視されます | [transcription] が設定されていません | [transcription] ブロックを enabled = true で追加します |
ログキーワード
| 条件 | ログメッセージ |
|---|---|
| 起動時に正常 | LINE: webhook server listening on http://0.0.0.0:<port>/line/webhook |
| 署名が拒否されました | LINE: invalid X-Line-Signature |
| 認可されていないDM | LINE: DM from <userId> rejected by policy |
| ペアリングが必要です | LINE: unpaired user <userId>; ignoring until /bind |
| 音声は無視されました(トランスクリプション未設定) | LINE: audio message ignored (transcription not configured) |
| 音声トランスクリプションに失敗しました | LINE: transcription failed for <messageId>: |
関連項目も参照してください
- 設定リファレンス: 設定フィールドの完全な索引
- LINE Developers Documentation