Signal
Signal:signal-cli(JSON-RPC + SSE)ベースの接続、設定、番号モデル。
ステータス:外部CLI統合。GatewayはHTTP JSON-RPC + SSE経由でsignal-cliと通信します。
初心者向けクイックセットアップ
1. <strong>別のSignal番号</strong>をbot番号として使用することをお勧めします。
2. <code>signal-cli</code>をインストールします(Javaが必要)。
3. botデバイスをリンクしてdaemonを起動します:
- <code>signal-cli link -n "OpenClaw"</code>
4. OpenClawを設定してgatewayを起動します。
Minimal configuration:
{
channels: {
signal: {
enabled: true,
account: "+15551234567",
cliPath: "signal-cli",
dmPolicy: "pairing",
allowFrom: ["+15557654321"],
},
},
}What It Is
- <code>signal-cli</code>経由でSignalに接続(埋め込みlibsignalではありません)。
- 決定論的ルーティング:返信は常にSignalに戻ります。
- DMはエージェントのメインセッションを使用;グループチャットは'<code>'agent:'<agentId>':signal:group:'<groupId>''</code>'として分離されます。
設定書き込み(Config writes)
デフォルトでは、<code>/config set|unset</code>によってトリガーされた更新を設定ファイルに書き戻すことを許可します(<code>commands.config: true</code>が必要)。
Disable:
{
channels: { signal: { configWrites: false } },
}番号モデル(重要)
- Gatewayは<strong>Signalデバイス</strong>(つまり<code>signal-cli</code>がログインしているアカウント)に接続します。
- <strong>自分の個人Signalアカウント</strong>でbotを実行する場合、ループを回避するために、自分が送信したメッセージは無視されます。
- 「私がbotにメッセージを送り、botが私に返信する」ようにしたい場合は、<strong>別のbot番号</strong>を使用してください。
設定(クイックパス)
1. <code>signal-cli</code>をインストールします(Javaが必要)。
2. botアカウントをリンクします:
- <code>signal-cli link -n "OpenClaw"</code> その後SignalでQRコードをスキャン
3. gatewayを設定して起動します。
マルチアカウント:'<code>'channels.signal.accounts'</code>'を使用して各アカウントを設定します(オプションの'<code>'name'</code>')。共有構造については'<a href="/gateway/configuration#telegramaccounts--discordaccounts--slackaccounts--signalaccounts--imessageaccounts">'/gateway/configuration'</a>'を参照してください。
外部daemonモード(httpUrl)
<code>signal-cli</code>を自分で管理したい場合(JVMコールドスタート、コンテナ初期化、または共有CPUの起動オーバーヘッドを回避するため)、daemonを別途実行し、OpenClawがそれに接続できるようにすることができます:
{
channels: {
signal: {
httpUrl: "http://127.0.0.1:8080",
autoStart: false,
},
},
}これにより、OpenClaw側の自動起動と起動待機がスキップされます。自動起動時に起動が遅すぎる場合は、<code>channels.signal.startupTimeoutMs</code>を調整できます。
アクセス制御(DM + グループチャット)
DM:
- デフォルト:<code>channels.signal.dmPolicy = "pairing"</code>。
- 不明な送信者はペアリングコードを受け取り、承認されるまでメッセージは処理されません(1時間で期限切れ)。
- Approve:
- <code>openclaw pairing list signal</code>
- '<code>'openclaw pairing approve signal '<CODE>''</code>'
- ペアリングはSignal DMのデフォルトのトークン交換です。'<a href="/start/pairing">'Pairing'</a>'を参照してください。
- If the sender only has a UUID (from '<code>'sourceUuid'</code>'), it will be stored in '<code>'channels.signal.allowFrom'</code>' as '<code>'uuid:'<id>''</code>'.
グループチャット:
- <code>channels.signal.groupPolicy = open | allowlist | disabled</code>。
- <code>channels.signal.groupAllowFrom</code>は<code>allowlist</code>の場合にどの送信者がトリガーできるかを制御します。
How It Works (Behavior)
- <code>signal-cli</code>はdaemonとして実行;gatewayはSSE経由でイベントを読み取ります。
- 受信メッセージは共通のチャンネルエンベロープに正規化されます。
- 返信は常に同じ番号またはグループに戻ります。
メディアと制限
- 送信テキストは<code>channels.signal.textChunkLimit</code>で分割されます(デフォルト4000)。
- オプションで空行優先分割:<code>channels.signal.chunkMode="newline"</code>。
- 添付ファイルをサポート(<code>signal-cli</code>がbase64として提供)。
- デフォルトのメディア制限:<code>channels.signal.mediaMaxMb</code>(デフォルト8MB)。
- <code>channels.signal.ignoreAttachments</code>でメディアダウンロードをスキップできます。
- グループ履歴コンテキスト:<code>channels.signal.historyLimit</code>(または<code>channels.signal.accounts.*.historyLimit</code>)、フォールバック<code>messages.groupChat.historyLimit</code>。<code>0</code>に設定して無効化(デフォルト50)。
入力状態と既読
- <strong>Typing</strong>:OpenClawは<code>signal-cli sendTyping</code>経由で入力中シグナルを送信し、返信実行中に更新します。
- <strong>Read receipts</strong>:<code>channels.signal.sendReadReceipts</code>がtrueの場合、OpenClawは許可されたDMの既読受領を転送します。
- signal-cliはグループチャットの既読受領をサポートしていません。
リアクション(メッセージツール)
- メッセージツールを使用:<code>message action=react channel=signal</code>。
- ターゲットはE.164またはUUIDを使用可能(ペアリング出力から'<code>'uuid:'<id>''</code>'を取得;生のUUIDも可)。
- <code>messageId</code>はリアクションするメッセージのSignalタイムスタンプです。
- グループチャットのリアクションには<code>targetAuthor</code>または<code>targetAuthorUuid</code>が必要です。
Examples:
message action=react channel=signal target=uuid:123e4567-e89b-12d3-a456-426614174000 messageId=1737630212345 emoji=🔥 message action=react channel=signal target=+15551234567 messageId=1737630212345 emoji=🔥 remove=true message action=react channel=signal target=signal:group:'<groupId>' targetAuthor=uuid:'<sender-uuid>' messageId=1737630212345 emoji=✅
設定スイッチ:
- <code>channels.signal.actions.reactions</code>:リアクションを有効にするかどうか(デフォルトtrue)。
- <code>channels.signal.reactionLevel</code>:<code>off | ack | minimal | extensive</code>
- <code>off</code>/<code>ack</code>はエージェントリアクションを無効化(メッセージツール<code>react</code>はエラーになります)
- <code>minimal</code>/<code>extensive</code>はエージェントリアクションを有効化し、ガイダンス強度を設定
- アカウントごとのオーバーライド:'<code>'channels.signal.accounts.'<id>'.actions.reactions'</code>'、'<code>'channels.signal.accounts.'<id>'.reactionLevel'</code>'
配信ターゲット(CLI/cron)
- DM:<code>signal:+15551234567</code>(または直接E.164を記述)
- UUID DM:'<code>'uuid:'<id>''</code>'(または生のUUID)
- グループチャット:'<code>'signal:group:'<groupId>''</code>'
- ユーザー名:'<code>'username:'<name>''</code>'(Signalアカウントがサポートしている場合)
Signal設定リファレンス
完全な設定リファレンスについては、'<a href="/gateway/configuration">'Configuration'</a>'を参照してください。
チャンネルオプション:
- <code>channels.signal.enabled</code>
- <code>channels.signal.account</code>(botアカウントのE.164)
- <code>channels.signal.cliPath</code>
- <code>channels.signal.httpUrl</code>(daemon URL)
- <code>channels.signal.httpHost</code>、<code>channels.signal.httpPort</code>(デフォルト127.0.0.1:8080)
- <code>channels.signal.autoStart</code>(httpUrlが設定されていない場合のデフォルトtrue)
- <code>channels.signal.startupTimeoutMs</code> (startup wait, max 120000)
- <code>channels.signal.receiveMode</code>(<code>on-start | manual</code>)
- <code>channels.signal.ignoreAttachments</code>
- <code>channels.signal.ignoreStories</code>
- <code>channels.signal.sendReadReceipts</code>
- <code>channels.signal.dmPolicy</code>(<code>pairing | allowlist | open | disabled</code>、デフォルトpairing)
- '<code>'channels.signal.allowFrom'</code>'(DM許可リスト:E.164または'<code>'uuid:'<id>''</code>';openには'<code>'"*"'</code>'が必要)
- <code>channels.signal.groupPolicy</code>(デフォルトallowlist)
- <code>channels.signal.groupAllowFrom</code>
- <code>channels.signal.historyLimit</code>(0で無効化)
- '<code>'channels.signal.dmHistoryLimit'</code>'(DM履歴制限、ユーザーターン単位;ユーザーごとのオーバーライド'<code>'channels.signal.dms["'<phone_or_uuid>'"].historyLimit'</code>')
- <code>channels.signal.textChunkLimit</code>
- <code>channels.signal.chunkMode</code>
- <code>channels.signal.mediaMaxMb</code>
関連グローバルオプション:
- <code>agents.list[].groupChat.mentionPatterns</code>(Signalにはネイティブメンションがありません)
- <code>messages.groupChat.mentionPatterns</code>
- <code>messages.responsePrefix</code>