OpenClaw

OpenClaw WhatsApp チャンネル

メッセージング
普通

Baileys プロトコルを使用して OpenClaw を WhatsApp に接続します。この統合により、Business API を必要とせずに AI アシスタントが WhatsApp でメッセージの送受信が可能になります。スマートフォンで QR コードをスキャンするだけで準備完了です。クリーンなルーティングのために専用の電話番号の使用を推奨します。

基本情報
難易度普通
カテゴリメッセージング
対応機能数5 / 6

WhatsApp 対応機能

テキストメッセージ

対応

メディア・ファイル

対応

リアクション

対応

スレッド

非対応

音声メッセージ

対応

グループチャット

対応

WhatsApp 前提条件

  • WhatsApp 専用の電話番号(個人番号とは別の番号を推奨)
  • サーバーに Node.js 18+ がインストール済み(Bun は非推奨)
  • OpenClaw Gateway が稼働・設定済み

WhatsApp クイックセットアップ

1

WhatsApp チャンネル設定を追加

~/.openclaw/openclaw.json に WhatsApp チャンネルの設定を追加します。dmPolicy(allowlist、pairing、または open)と allowFrom リストを設定して、アシスタントにメッセージを送信できるユーザーを制御します。

2

ログインコマンドを実行して QR コードをスキャン

ターミナルで 'openclaw channels login' を実行します。QR コードが表示されます。スマートフォンの WhatsApp でスキャンしてください(設定 > リンクされたデバイス > デバイスをリンク)。認証情報は ~/.openclaw/credentials/whatsapp/ に保存されます。

3

テストメッセージを送信

別のスマートフォンから WhatsApp 番号にダイレクトメッセージを送信します。allowlist ポリシーを使用している場合は、送信者の番号が allowFrom リストに含まれていることを確認してください。デフォルトの pairing ポリシーを使用している場合は、'openclaw pairing approve whatsapp <code>' で送信者を承認してください。

WhatsApp 設定例

config.json
{
  "channels": {
    "whatsapp": {
      "dmPolicy": "allowlist",
      "allowFrom": ["+15551234567"]
    }
  }
}

WhatsApp 詳細ドキュメント

アーキテクチャ概要

OpenClaw は Baileys ライブラリを通じて WhatsApp に接続します。これは WhatsApp Web のマルチデバイスプロトコルをリバースエンジニアリングしたオープンソース実装です。公式の WhatsApp Business API(Meta の承認が必要で、会話ごとに課金)とは異なり、Baileys はリンクされたデバイスをエミュレートして直接接続します。 アーキテクチャはシンプルです:お使いのスマートフォンがプライマリデバイスのまま、Gateway がリンクされたコンパニオンデバイスとして機能します。メッセージは通常通り WhatsApp のサーバーを経由して流れ、OpenClaw は受信メッセージをインターセプトし、AI で処理して、応答を返送するだけです。
接続はスマートフォンベースのため、スマートフォンはオンラインを維持する必要があります。約14日以上オフラインになると、WhatsApp はセッションのリンクを解除します。
Baileys はマルチデバイスをネイティブサポートしています。電話番号あたり最大4台のリンクデバイスを持つことができ、Gateway はそのうちの1台としてカウントされます。

電話番号のセットアップ

専用の電話番号の使用を強く推奨します。個人番号を使用することも可能ですが、個人的な会話とボットの会話を混在させるとルーティングの混乱を招き、連絡先に迷惑をかける可能性があります。 WhatsApp の初期登録のために SMS または音声通話を受信できる実際の電話番号が必要です。登録後は、WhatsApp がインストールされたスマートフォンで番号がアクティブな状態を維持するだけで十分です。
openclaw.json
{
  "channels": {
    "whatsapp": {
      "accounts": {
        "default": {
          "phone": "+15551234567"
        }
      }
    }
  }
}
VoIP 番号(TextNow、Google Voice、無料 SMS サービスなど)の使用は避けてください。WhatsApp は VoIP で登録されたアカウントを頻繁にブロックします。最高の信頼性のために、実際の SIM カード、プリペイド SIM、または専用の eSIM を使用してください。

ログインと認証情報

チャンネルの設定後、スマートフォンを Gateway とペアリングする必要があります。ログインコマンドを実行すると、ターミナルに QR コードが表示されます。スマートフォンの WhatsApp でスキャンしてください(設定 → リンクされたデバイス → デバイスをリンク)。 認証情報は ~/.openclaw/credentials/whatsapp/<accountId>/creds.json に自動保存され、再起動後も保持されます。破損時の復旧用にバックアップ(creds.json.bak)が自動作成されます。セッションが期限切れになるか手動で取り消されない限り、QR コードのスキャンは一度だけで済みます。
ターミナル
openclaw channels login whatsapp
ディスプレイのないサーバー(ヘッドレス)で実行する場合は、--qr-terminal フラグを使用して QR コードを ASCII アートとしてターミナルに直接表示できます。

DM ポリシー

DM(ダイレクトメッセージ)ポリシーは、AI アシスタントとやり取りできるユーザーを制御します。OpenClaw は4つのポリシーをサポートしています: • pairing(デフォルト)— 新しい連絡先はペアリングフローを経る必要があります。メッセージを送信するとペアリングコードを受け取り、CLI で承認または拒否します。承認後は自由にチャットできます。 • allowlist — allowFrom に明示的にリストされた電話番号のみがボットにメッセージを送信できます。それ以外はサイレントに無視されます。 • open — 番号にメッセージを送信した全員が応答を受け取ります。本番環境では注意して使用してください。 • disabled — DM 処理が完全に無効化されます。ボットはダイレクトメッセージに一切応答しません。
openclaw.json
{
  "channels": {
    "whatsapp": {
      "dmPolicy": "pairing",
      "allowFrom": ["+15551234567", "+15559876543"]
    }
  }
}

グループチャット管理

OpenClaw は WhatsApp のグループチャットに参加できます。デフォルトでは、共有会話での不要な AI 応答を防ぐため、グループサポートは無効になっています。 有効にすると、ボットは名前でメンションされた時、または設定されたキーワードでトリガーされた時のみ応答します。アクティブなグループとボットの起動方法を制御できます。
openclaw.json
{
  "channels": {
    "whatsapp": {
      "groupPolicy": "allowlist",
      "groupActivation": "mention",
      "groupAllowList": ["group-jid-1", "group-jid-2"]
    }
  }
}
グループ JID は、グループメッセージを受信した際の Gateway ログで確認できます。メッセージペイロードの 'from' フィールドを探してください。

既読確認

OpenClaw がメッセージ処理時に既読確認(青いチェックマーク)を送信するかどうかを設定できます。デフォルトでは、自然な会話感を維持するために既読確認が送信されます。 既読確認を無効にすると、ボットがあまり「アクティブ」に見えないようにしたい場合や、メッセージを非同期で処理する場合に便利です。
openclaw.json
{
  "channels": {
    "whatsapp": {
      "sendReadReceipts": true
    }
  }
}

確認リアクション

OpenClaw は、AI の応答が準備される前に、受信メッセージに絵文字でリアクションして受信を確認できます。AI の応答には数秒かかることがあるため、リアクションにより送信者にメッセージが受信されたことを知らせることができます。 ダイレクトメッセージとグループチャットで異なるリアクションを設定したり、機能全体を無効にすることができます。
openclaw.json
{
  "channels": {
    "whatsapp": {
      "ackReaction": {
        "emoji": "👀",
        "direct": true,
        "group": true
      }
    }
  }
}

送信メッセージとメディア

OpenClaw は WhatsApp を通じてテキスト、画像、ドキュメント、音声、動画の送信に対応しています。メディアファイルは自動的に処理されます。Gateway がファイルを WhatsApp のサーバーにアップロードし、適切なメッセージタイプで送信します。 長い AI の応答は、WhatsApp のメッセージサイズ制限内に収まるよう自動的にチャンク分割されます。チャンクサイズと動作は設定で変更できます。
デフォルトの受信メディアサイズ制限は 50 MB(mediaMaxMb)です。送信メディアの制限は 5 MB(agents.defaults.mediaMaxMb)で、オーバーサイズの画像には自動 JPEG 最適化とリサイズが適用されます。

レート制限と送信制限

WhatsApp はリンクされたデバイスにレート制限を適用します。個人アカウントに対する公式の公開された制限はありませんが、メッセージを速すぎるペースで大量に送信すると、一時的な停止やアカウント制限が発生する可能性があります。 OpenClaw にはアカウントを保護するための組み込みレート制限が含まれています。デフォルト設定は控えめで、ほとんどのユースケースに適しています。
openclaw.json
{
  "channels": {
    "whatsapp": {
      "textChunkLimit": 5,
      "mediaMaxMb": 50
    }
  }
}

なぜ Twilio / WhatsApp Business API を使わないのか?

OpenClaw が公式の WhatsApp Business API(Twilio、MessageBird などを通じて)ではなく Baileys を使用する理由が気になるかもしれません。その理由は以下の通りです: • コスト — Business API は会話ごとに課金されます(地域により1メッセージあたり約 $0.005~$0.08)。個人や小チームの使用では、すぐに費用がかさみます。Baileys は無料です。 • 承認 — Business API には Meta の認証、登録企業、メッセージテンプレートの承認が必要です。Baileys は任意の個人 WhatsApp アカウントで動作します。 • 柔軟性 — Business API には送信メッセージに対する厳格なテンプレート要件と24時間の会話ウィンドウがあります。Baileys にはそのような制限はありません。 • セルフホスト — Baileys では、すべてが自分のサーバーで実行されます。サードパーティの API プロバイダーがメッセージを見ることはありません。 トレードオフは信頼性です:Business API は公式にサポートされていますが、Baileys はリバースエンジニアリングに依存しており、WhatsApp がプロトコルを変更した場合に動作しなくなる可能性があります。ほとんどのセルフホストのユースケースでは、このトレードオフは価値があります。

WhatsApp 設定リファレンス

dmPolicy
Type: stringDefault: "pairing"

ボットに DM を送信できるユーザーを制御。オプション:pairing、allowlist、open、disabled

selfChatMode
Type: stringDefault: "disabled"

自分自身への送信メッセージの処理方法。オプション:disabled、ai、note

allowFrom
Type: string[]Default: []

ボットにメッセージを送信できる電話番号のリスト(dmPolicy が allowlist の場合)

sendReadReceipts
Type: booleanDefault: true

メッセージ処理時に青いチェックマークの既読確認を送信するかどうか

ackReaction.emoji
Type: stringDefault: "👀"

メッセージ受信確認に使用する絵文字

ackReaction.direct
Type: booleanDefault: true

ダイレクトメッセージで確認リアクションを送信

ackReaction.group
Type: booleanDefault: true

グループメッセージで確認リアクションを送信

textChunkLimit
Type: numberDefault: 5

AI 応答あたりの最大テキストチャンク数

mediaMaxMb
Type: numberDefault: 50

受信メディアファイルの最大サイズ(MB)。送信制限は agents.defaults.mediaMaxMb で制御(デフォルト 5 MB)

groupPolicy
Type: stringDefault: "disabled"

グループチャットポリシー。オプション:disabled、allowlist、open

groupActivation
Type: stringDefault: "mention"

グループでボットをトリガーする方法。オプション:mention、always

historyLimit
Type: numberDefault: 50

AI コンテキストとして含める最近のメッセージ数

chunkMode
Type: stringDefault: "split"

長い応答の処理方法。オプション:split、newline、truncate

messagePrefix
Type: stringDefault: ""

すべての送信メッセージに追加するオプションのプレフィックス

accounts.<id>.*
Type: objectDefault: {}

アカウントごとの設定(電話番号、認証情報パス、上書き設定)

WhatsApp よくある質問

WhatsApp トラブルシューティング

WhatsApp が「リンクされていません」と表示される、または QR コードがスキャンできない

セッションの認証情報が期限切れになったか、スマートフォンの WhatsApp アプリがアップデートされてリンクされたセッションが無効になった可能性があります。

~/.openclaw/credentials/whatsapp/ の認証情報フォルダを削除し、'openclaw channels login whatsapp' を再実行してペアリングし直してください。QR スキャン時にスマートフォンのインターネット接続が安定していることを確認してください。
ボットは接続されるが繰り返し切断される

通常、スマートフォンが長期間オフラインになった場合、または別のリンクされたデバイスが Gateway セッションと競合している場合に発生します。

スマートフォンがインターネットに接続されたままであることを確認してください。リンクされたデバイスの4台の上限を超えていないか確認してください。WhatsApp 設定 → リンクされたデバイスから未使用のリンクデバイスを削除し、再度ログインしてください。
メッセージの送信に失敗する(タイムアウトまたは配信失敗)

レート制限、ネットワークの問題、または受信者が番号をブロックしている。

Gateway のログで特定のエラーコードを確認してください。レート制限エラーが表示される場合は、送信頻度を下げてください。ネットワークの問題の場合は、サーバーのインターネット接続が安定しているか確認してください。スマートフォンから手動でメッセージを送信して、番号が制限されていないことを確認してください。