Skip to main content
ステータス: WhatsApp Web (Baileys) 経由で実稼働準備完了。ゲートウェイはリンクされたセッションを所有します。

クイックセットアップ

1

WhatsApp アクセス ポリシーを構成する

{
  channels: {
    whatsapp: {
      dmPolicy: "pairing",
      allowFrom: ["+15551234567"],
      groupPolicy: "allowlist",
      groupAllowFrom: ["+15551234567"],
    },
  },
}
2

WhatsApp へのリンク (QR)

openclaw channels login --channel whatsapp
特定のアカウントの場合:
openclaw channels login --channel whatsapp --account work
3

ゲートウェイを起動する

openclaw gateway
4

最初のペアリング要求を承認する (ペアリング モードを使用している場合)

openclaw pairing list whatsapp
openclaw pairing approve whatsapp <CODE>
ペアリング要求は 1 時間後に期限切れになります。保留中のリクエストはチャネルごとに 3 に制限されます。
OpenClaw では、可能な場合は別の番号で WhatsApp を実行することをお勧めします。 (チャネルのメタデータとオンボーディング フローはそのセットアップ用に最適化されていますが、個人番号のセットアップもサポートされています。)

導入パターン

これは最もクリーンな動作モードです。
  • OpenClaw 用に別の WhatsApp ID
  • より明確な DM ホワイトリストとルーティング境界
  • セルフチャットの混乱の可能性が低くなります
最小限のポリシー パターン:
{
  channels: {
    whatsapp: {
      dmPolicy: "allowlist",
      allowFrom: ["+15551234567"],
    },
  },
}
オンボーディングは個人番号モードをサポートし、セルフチャットに適したベースラインを書き込みます。
  • dmPolicy: "allowlist"
  • allowFrom には個人番号が含まれます
  • selfChatMode: true
実行時、セルフチャット保護により、リンクされた自己番号と allowFrom がキーオフされます。
メッセージング プラットフォーム チャネルは、現在の OpenClaw チャネル アーキテクチャでは WhatsApp Web ベース (Baileys) です。組み込みのチャット チャネル レジストリには、個別の Twilio WhatsApp メッセージング チャネルはありません。

ランタイムモデル

  • ゲートウェイは WhatsApp ソケットと再接続ループを所有します。
  • アウトバウンド送信には、ターゲット アカウントのアクティブな WhatsApp リスナーが必要です。
  • ステータス チャットとブロードキャスト チャットは無視されます (@status@broadcast)。
  • ダイレクト チャットは DM セッション ルールを使用します (session.dmScope、デフォルトの main はエージェントのメイン セッションへの DM を折りたたみます)。
  • グループ セッションは分離されています (agent:<agentId>:whatsapp:group:<jid>)。

アクセス制御とアクティベーション

channels.whatsapp.dmPolicy は、直接チャット アクセスを制御します。
  • pairing (デフォルト)
  • allowlist
  • open ("*" を含めるには allowFrom が必要です)
  • disabled
allowFrom は、E.164 形式の数値 (内部で正規化されたもの) を受け入れます。マルチアカウントオーバーライド: channels.whatsapp.accounts.<id>.dmPolicy (および allowFrom) は、そのアカウントのチャネルレベルのデフォルトよりも優先されます。実行時の動作の詳細:
  • ペアリングはチャネルの許可ストアに保持され、構成された allowFrom とマージされます。
  • ホワイトリストが設定されていない場合、リンクされた自己番号はデフォルトで許可されます
  • 送信 fromMe DM は自動ペアリングされません

個人番号とセルフチャットの動作

リンクされた自己番号が allowFrom にも存在する場合、WhatsApp セルフチャットの保護機能が有効になります。
  • セルフチャットターンの開封確認をスキップします
  • 自分自身に ping を実行するメンション JID 自動トリガー動作を無視します
  • messages.responsePrefix が設定されていない場合、セルフチャットの返信はデフォルトで [{identity.name}] または [openclaw] になります。

メッセージの正規化とコンテキスト

受信 WhatsApp メッセージは、共有受信エンベロープでラップされます。引用された返信が存在する場合、コンテキストが次の形式で追加されます。
[Replying to <sender> id:<stanzaId>]
<quoted body or media placeholder>
[/Replying]
```利用可能な場合は、返信メタデータ フィールドも入力されます (`ReplyToId`、`ReplyToBody`、`ReplyToSender`、送信者 JID/E.164)。

</Accordion>

<Accordion title="Media placeholders and location/contact extraction">
メディアのみの受信メッセージは、次のようなプレースホルダーを使用して正規化されます。

- `<media:image>`
- `<media:video>`
- `<media:audio>`
- `<media:document>`
- `<media:sticker>`

場所と連絡先のペイロードは、ルーティング前にテキスト コンテキストに正規化されます。

</Accordion>

<Accordion title="保留中のグループ履歴の挿入">
グループの場合、未処理のメッセージをバッファリングし、ボットが最終的にトリガーされたときにコンテキストとして挿入できます。

- デフォルトの制限: `50`
- 構成: `channels.whatsapp.historyLimit`
- フォールバック: `messages.groupChat.historyLimit`
- `0` を無効にします

注射マーカー:

- `[Chat messages since your last reply - for context]`
- `[Current message - respond to this]`

</Accordion>

<Accordion title="開封確認">
開封確認は、受信された WhatsApp メッセージに対してデフォルトで有効になっています。

グローバルに無効にする:

```json5
{
  channels: {
    whatsapp: {
      sendReadReceipts: false,
    },
  },
}
アカウントごとの上書き:
{
  channels: {
    whatsapp: {
      accounts: {
        work: {
          sendReadReceipts: false,
        },
      },
    },
  },
}
セルフチャットは、グローバルに有効になっている場合でも開封確認をスキップします。

配信、チャンキング、およびメディア

  • デフォルトのチャンク制限: channels.whatsapp.textChunkLimit = 4000
  • channels.whatsapp.chunkMode = "length" | "newline"
  • newline モードは段落境界 (空白行) を優先し、その後長さ安全なチャンクに戻ります。
  • 画像、ビデオ、オーディオ (PTT 音声メモ)、およびドキュメントのペイロードをサポート
  • ボイスノートの互換性のために、audio/oggaudio/ogg; codecs=opus に書き換えられます
  • アニメーション GIF の再生は、ビデオ送信の gifPlayback: true 経由でサポートされます。
  • マルチメディア応答ペイロードを送信するときに、キャプションが最初のメディア アイテムに適用されます。
  • メディア ソースは HTTP(S)、file://、またはローカル パスにすることができます。
  • インバウンドメディア保存キャップ: channels.whatsapp.mediaMaxMb (デフォルト 50)
  • 送信メディア送信上限: channels.whatsapp.mediaMaxMb (デフォルト 50)
  • アカウントごとの上書きには channels.whatsapp.accounts.<accountId>.mediaMaxMb を使用します
  • 画像は制限に合わせて自動的に最適化されます (サイズ変更/品質スイープ)。
  • メディア送信失敗時、最初のアイテムのフォールバックは応答をサイレントにドロップする代わりにテキスト警告を送信します。

肯定応答

WhatsApp は、channels.whatsapp.ackReaction 経由の受信受信に対する即時確認応答をサポートしています。
{
  channels: {
    whatsapp: {
      ackReaction: {
        emoji: "👀",
        direct: true,
        group: "mentions", // always | mentions | never
      },
    },
  },
}
行動メモ:
  • 受信が受け入れられた後すぐに送信されます (事前応答)
  • 失敗はログに記録されますが、通常の応答配信はブロックされません
  • グループモード mentions は言及によって引き起こされたターンに反応します。グループのアクティブ化 always は、このチェックのバイパスとして機能します
  • WhatsApp は channels.whatsapp.ackReaction を使用します (従来の messages.ackReaction はここでは使用されません)

マルチアカウントと認証情報

  • アカウント ID は channels.whatsapp.accounts から取得されます
  • デフォルトのアカウント選択: default (存在する場合)、それ以外の場合は最初に設定されたアカウント ID (ソート済み)
  • アカウント ID は検索用に内部的に正規化されます
  • 現在の認証パス: ~/.openclaw/credentials/whatsapp/<accountId>/creds.json
  • バックアップ ファイル: creds.json.bak
  • ~/.openclaw/credentials/ の従来のデフォルト認証は引き続きデフォルト アカウント フローで認識/移行されます
openclaw channels logout --channel whatsapp [--account <id>] は、そのアカウントの WhatsApp 認証状態をクリアします。従来の認証ディレクトリでは、oauth.json は保持されますが、Baileys 認証ファイルは削除されます。

ツール、アクション、構成の書き込み

  • エージェント ツールのサポートには、WhatsApp 反応アクション (react) が含まれます。
  • アクションゲート:
    • channels.whatsapp.actions.reactions
    • channels.whatsapp.actions.polls
  • チャネル開始の設定書き込みはデフォルトで有効になっています (channels.whatsapp.configWrites=false で無効にします)。

トラブルシューティング

症状: チャネルステータスレポートがリンクされていません。修正:
openclaw channels login --channel whatsapp
openclaw channels status
症状: リンクされたアカウントで、切断または再接続が繰り返し試行されます。修正:
openclaw doctor
openclaw logs --follow
必要に応じて、channels login と再リンクします。
ターゲット アカウントにアクティブなゲートウェイ リスナーが存在しない場合、アウトバウンド送信は失敗します。ゲートウェイが実行中であり、アカウントがリンクされていることを確認してください。
次の順序で確認してください。
  • groupPolicy
  • groupAllowFrom / allowFrom
  • groups ホワイトリスト エントリ
  • メンションゲート (requireMention + メンションパターン)
  • openclaw.json (JSON5) の重複キー: 後のエントリは前のエントリをオーバーライドするため、スコープごとに 1 つの groupPolicy を保持します。
WhatsApp ゲートウェイ ランタイムは Node を使用する必要があります。 Bun は、WhatsApp/Telegram ゲートウェイの安定した動作には互換性がないとしてフラグが立てられています。

構成参照ポインタ

主な参考文献: シグナルの高い WhatsApp フィールド:
  • アクセス: dmPolicyallowFromgroupPolicygroupAllowFromgroups
  • 配送: textChunkLimitchunkModemediaMaxMbsendReadReceiptsackReaction
  • マルチアカウント: accounts.<id>.enabledaccounts.<id>.authDir、アカウントレベルの上書き
  • 操作: configWritesdebounceMsweb.enabledweb.heartbeatSecondsweb.reconnect.*
  • セッションの動作: session.dmScopehistoryLimitdmHistoryLimitdms.<id>.historyLimit

関連- ペアリング