WhatsApp(Webチャンネル)
ステータス: WhatsApp Web(Baileys)経由で本番運用対応。Gatewayがリンク済みセッションを管理します。インストール(必要時)
- オンボーディング(
openclaw onboard)およびopenclaw channels add --channel whatsappでは、初めて選択したときにWhatsApp pluginのインストールを促します。 openclaw channels login --channel whatsappでも、pluginがまだ存在しない場合はインストールフローが提示されます。- Devチャンネル + gitチェックアウトでは、デフォルトでローカルpluginパスが使用されます。
- Stable/Betaでは、デフォルトでnpmパッケージ
@openclaw/whatsappが使用されます。
Pairing
未知の送信者に対するデフォルトのDMポリシーはpairingです。
Channel troubleshooting
チャンネル横断の診断と修復プレイブックです。
Gateway configuration
完全なチャンネル設定パターンと例です。
クイックセットアップ
OpenClawでは、可能であればWhatsAppを別の番号で運用することを推奨しています。(チャンネルメタデータとセットアップフローはその構成向けに最適化されていますが、個人番号での構成もサポートされています。)
デプロイパターン
Dedicated number (recommended)
Dedicated number (recommended)
これは最も運用しやすいモードです。
- OpenClaw用に分離されたWhatsApp ID
- より明確なDM allowlistとルーティング境界
- 自分とのチャット混乱が起きる可能性が低い
Personal-number fallback
Personal-number fallback
オンボーディングは個人番号モードをサポートしており、自分とのチャットに適したベースラインを書き込みます。
dmPolicy: "allowlist"allowFromに自分の個人番号を含めるselfChatMode: true
allowFromをもとに動作します。WhatsApp Web-only channel scope
WhatsApp Web-only channel scope
現在のOpenClawチャンネルアーキテクチャでは、メッセージングプラットフォームチャンネルはWhatsApp Webベース(
Baileys)です。組み込みのチャットチャンネルレジストリには、別個のTwilio WhatsAppメッセージングチャンネルはありません。ランタイムモデル
- GatewayがWhatsAppソケットと再接続ループを管理します。
- 送信には、対象アカウントに対するアクティブなWhatsAppリスナーが必要です。
- ステータスチャットとブロードキャストチャットは無視されます(
@status、@broadcast)。 - ダイレクトチャットではDMセッションルール(
session.dmScope)が使われます。デフォルトのmainではDMはagentのメインセッションに統合されます。 - グループセッションは分離されます(
agent:<agentId>:whatsapp:group:<jid>)。
アクセス制御と有効化
- DM policy
- Group policy + allowlists
- Mentions + /activation
channels.whatsapp.dmPolicyはダイレクトチャットアクセスを制御します。pairing(デフォルト)allowlistopen(allowFromに"*"を含める必要があります)disabled
allowFromはE.164形式の番号を受け付けます(内部で正規化されます)。マルチアカウント上書き: channels.whatsapp.accounts.<id>.dmPolicy(およびallowFrom)は、そのアカウントに対してチャンネルレベルのデフォルトより優先されます。ランタイム動作の詳細:- pairingsはチャンネルallow-storeに永続化され、設定済みの
allowFromとマージされます - allowlistが設定されていない場合、リンク済みの自分の番号はデフォルトで許可されます
- 送信元が
fromMeのDMは自動pairingされません
個人番号と自分とのチャット動作
リンク済みの自分の番号がallowFromにも含まれている場合、WhatsAppの自分とのチャット保護が有効になります。
- 自分とのチャットターンでは既読通知をスキップ
- 本来なら自分自身にpingするmention-JID自動トリガー動作を無視
messages.responsePrefixが未設定の場合、自分とのチャット返信のデフォルトは[{identity.name}]または[openclaw]
メッセージ正規化とコンテキスト
Inbound envelope + reply context
Inbound envelope + reply context
受信したWhatsAppメッセージは共有の受信エンベロープでラップされます。引用返信が存在する場合、コンテキストは次の形式で追加されます。返信メタデータフィールドも、利用可能な場合は設定されます(
ReplyToId、ReplyToBody、ReplyToSender、sender JID/E.164)。Media placeholders and location/contact extraction
Media placeholders and location/contact extraction
メディアのみの受信メッセージは、次のようなプレースホルダーで正規化されます。
<media:image><media:video><media:audio><media:document><media:sticker>
Pending group history injection
Pending group history injection
グループでは、未処理メッセージをバッファリングし、botが最終的にトリガーされたときにコンテキストとして注入できます。
- デフォルト上限:
50 - config:
channels.whatsapp.historyLimit - フォールバック:
messages.groupChat.historyLimit 0で無効化
[Chat messages since your last reply - for context][Current message - respond to this]
Read receipts
Read receipts
既読通知は、受け付けられた受信WhatsAppメッセージに対してデフォルトで有効です。グローバルに無効化する場合:アカウントごとの上書き:自分とのチャットターンでは、グローバルに有効でも既読通知はスキップされます。
配信、チャンク化、メディア
Text chunking
Text chunking
- デフォルトのチャンク上限:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"newlineモードでは段落境界(空行)を優先し、その後で長さ安全なチャンク化にフォールバックします
Outbound media behavior
Outbound media behavior
- 画像、動画、音声(PTTボイスノート)、ドキュメントのペイロードをサポート
audio/oggは、ボイスノート互換性のためaudio/ogg; codecs=opusに書き換えられます- アニメーションGIF再生は、動画送信時の
gifPlayback: trueでサポートされます - 複数メディア返信ペイロードを送信する際、キャプションは最初のメディア項目に適用されます
- メディアソースにはHTTP(S)、
file://、ローカルパスを使用できます
Media size limits and fallback behavior
Media size limits and fallback behavior
- 受信メディア保存上限:
channels.whatsapp.mediaMaxMb(デフォルト50) - 送信メディア送信上限:
channels.whatsapp.mediaMaxMb(デフォルト50) - アカウントごとの上書きには
channels.whatsapp.accounts.<accountId>.mediaMaxMbを使用します - 画像は制限内に収めるため自動最適化されます(リサイズ/品質スイープ)
- メディア送信失敗時には、先頭項目フォールバックとしてテキスト警告を送信し、応答が黙って失われることを防ぎます
リアクションレベル
channels.whatsapp.reactionLevelは、agentがWhatsAppで絵文字リアクションをどの程度広く使用するかを制御します。
| レベル | Ackリアクション | agent起点リアクション | 説明 |
|---|---|---|---|
"off" | いいえ | いいえ | リアクションを一切行いません |
"ack" | はい | いいえ | Ackリアクションのみ(返信前の受領) |
"minimal" | はい | はい(保守的) | Ack + 保守的ガイダンス付きagentリアクション |
"extensive" | はい | はい(推奨) | Ack + 推奨ガイダンス付きagentリアクション |
"minimal"。
アカウントごとの上書きにはchannels.whatsapp.accounts.<id>.reactionLevelを使用します。
確認応答リアクション
WhatsAppは、channels.whatsapp.ackReactionを介して受信時の即時ackリアクションをサポートします。
AckリアクションはreactionLevelで制御され、reactionLevelが"off"のときは抑制されます。
- 受信が受理された直後に送信されます(返信前)
- 失敗はログに記録されますが、通常の返信配信は妨げません
- グループモード
mentionsでは、mentionトリガーのターンにリアクションします。グループ有効化alwaysはこのチェックをバイパスします - WhatsAppでは
channels.whatsapp.ackReactionを使用します(legacyのmessages.ackReactionはここでは使用しません)
マルチアカウントと認証情報
Account selection and defaults
Account selection and defaults
- アカウントIDは
channels.whatsapp.accountsから取得されます - デフォルトアカウント選択:
defaultがあればそれ、なければ最初に設定されたアカウントID(ソート順) - アカウントIDは内部でルックアップ用に正規化されます
Credential paths and legacy compatibility
Credential paths and legacy compatibility
- 現在の認証パス:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - バックアップファイル:
creds.json.bak ~/.openclaw/credentials/内のlegacyデフォルト認証も、デフォルトアカウントフローでは引き続き認識/移行されます
Logout behavior
Logout behavior
openclaw channels logout --channel whatsapp [--account <id>]は、そのアカウントのWhatsApp認証状態を消去します。legacy認証ディレクトリでは、Baileys認証ファイルは削除されますがoauth.jsonは保持されます。ツール、アクション、config書き込み
- AgentツールサポートにはWhatsAppリアクションアクション(
react)が含まれます。 - アクションゲート:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- チャンネル起点のconfig書き込みはデフォルトで有効です(
channels.whatsapp.configWrites=falseで無効化)。
トラブルシューティング
Not linked (QR required)
Not linked (QR required)
症状: チャンネルステータスが未リンクと表示されます。修正:
Linked but disconnected / reconnect loop
Linked but disconnected / reconnect loop
症状: アカウントはリンク済みだが、切断や再接続試行が繰り返されます。修正:必要に応じて、
channels loginで再リンクしてください。No active listener when sending
No active listener when sending
対象アカウントに対するアクティブなgatewayリスナーが存在しない場合、送信は即座に失敗します。Gatewayが動作中で、アカウントがリンク済みであることを確認してください。
Group messages unexpectedly ignored
Group messages unexpectedly ignored
次の順序で確認してください。
groupPolicygroupAllowFrom/allowFromgroupsallowlistエントリー- mentionゲーティング(
requireMention+ mention patterns) openclaw.json(JSON5)内の重複キー: 後ろのエントリーが前のものを上書きするため、スコープごとにgroupPolicyは1つだけにしてください
Bun runtime warning
Bun runtime warning
WhatsApp gatewayランタイムではNodeを使用してください。Bunは、安定したWhatsApp/Telegram gateway運用と互換性がないとして扱われます。
設定リファレンスへのポインター
主要リファレンス: 重要なWhatsAppフィールド:- アクセス:
dmPolicy、allowFrom、groupPolicy、groupAllowFrom、groups - 配信:
textChunkLimit、chunkMode、mediaMaxMb、sendReadReceipts、ackReaction、reactionLevel - マルチアカウント:
accounts.<id>.enabled、accounts.<id>.authDir、アカウントレベル上書き - 運用:
configWrites、debounceMs、web.enabled、web.heartbeatSeconds、web.reconnect.* - セッション動作:
session.dmScope、historyLimit、dmHistoryLimit、dms.<id>.historyLimit