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

Signal

Signal:signal-cli(JSON-RPC + SSE)ベースの接続、設定、番号モデル。

ステータス:外部CLI統合。GatewayはHTTP JSON-RPC + SSE経由でsignal-cliと通信します。

Tutorial.step

初心者向けクイックセットアップ

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:

Json5
{
  channels: {
    signal: {
      enabled: true,
      account: "+15551234567",
      cliPath: "signal-cli",
      dmPolicy: "pairing",
      allowFrom: ["+15557654321"],
    },
  },
}
Tutorial.step

What It Is

- <code>signal-cli</code>経由でSignalに接続(埋め込みlibsignalではありません)。

- 決定論的ルーティング:返信は常にSignalに戻ります。

- DMはエージェントのメインセッションを使用;グループチャットは'<code>'agent:'<agentId>':signal:group:'<groupId>''</code>'として分離されます。

Tutorial.step

設定書き込み(Config writes)

デフォルトでは、<code>/config set|unset</code>によってトリガーされた更新を設定ファイルに書き戻すことを許可します(<code>commands.config: true</code>が必要)。

Disable:

Json5
{
  channels: { signal: { configWrites: false } },
}
Tutorial.step

番号モデル(重要)

- Gatewayは<strong>Signalデバイス</strong>(つまり<code>signal-cli</code>がログインしているアカウント)に接続します。

- <strong>自分の個人Signalアカウント</strong>でbotを実行する場合、ループを回避するために、自分が送信したメッセージは無視されます。

- 「私がbotにメッセージを送り、botが私に返信する」ようにしたい場合は、<strong>別のbot番号</strong>を使用してください。

Tutorial.step

設定(クイックパス)

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>'を参照してください。

Tutorial.step

外部daemonモード(httpUrl)

<code>signal-cli</code>を自分で管理したい場合(JVMコールドスタート、コンテナ初期化、または共有CPUの起動オーバーヘッドを回避するため)、daemonを別途実行し、OpenClawがそれに接続できるようにすることができます:

Json5
{
  channels: {
    signal: {
      httpUrl: "http://127.0.0.1:8080",
      autoStart: false,
    },
  },
}

これにより、OpenClaw側の自動起動と起動待機がスキップされます。自動起動時に起動が遅すぎる場合は、<code>channels.signal.startupTimeoutMs</code>を調整できます。

Tutorial.step

アクセス制御(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>の場合にどの送信者がトリガーできるかを制御します。

Tutorial.step

How It Works (Behavior)

- <code>signal-cli</code>はdaemonとして実行;gatewayはSSE経由でイベントを読み取ります。

- 受信メッセージは共通のチャンネルエンベロープに正規化されます。

- 返信は常に同じ番号またはグループに戻ります。

Tutorial.step

メディアと制限

- 送信テキストは<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)。

Tutorial.step

入力状態と既読

- <strong>Typing</strong>:OpenClawは<code>signal-cli sendTyping</code>経由で入力中シグナルを送信し、返信実行中に更新します。

- <strong>Read receipts</strong>:<code>channels.signal.sendReadReceipts</code>がtrueの場合、OpenClawは許可されたDMの既読受領を転送します。

- signal-cliはグループチャットの既読受領をサポートしていません。

Tutorial.step

リアクション(メッセージツール)

- メッセージツールを使用:<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:

Terminal
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>'

Tutorial.step

配信ターゲット(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アカウントがサポートしている場合)

Tutorial.step

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>