diff --git a/plugins/_whatsapp_integration/README.md b/plugins/_whatsapp_integration/README.md index a13a58f5c..8c159c265 100644 --- a/plugins/_whatsapp_integration/README.md +++ b/plugins/_whatsapp_integration/README.md @@ -22,6 +22,7 @@ The WhatsApp session persists across restarts in `usr/whatsapp/sessions/`. No re | Setting | Description | Default | |---------|-------------|---------| | `enabled` | Enable bridge and polling | `false` | +| `mode` | `bot` (separate number) or `self-chat` (personal number) | `bot` | | `bridge_port` | Local HTTP port for bridge | `3100` | | `poll_interval_seconds` | Poll frequency (min 2) | `3` | | `allowed_users` | Phone numbers without + prefix | `[]` (all) | diff --git a/plugins/_whatsapp_integration/api/qr_code.py b/plugins/_whatsapp_integration/api/qr_code.py index 6bcadfe6c..e898a67ff 100644 --- a/plugins/_whatsapp_integration/api/qr_code.py +++ b/plugins/_whatsapp_integration/api/qr_code.py @@ -16,6 +16,7 @@ class QrCode(ApiHandler): session_dir = files.get_abs_path("usr/whatsapp/sessions") cache_dir = files.get_abs_path("usr/whatsapp/media") allowed_users = config.get("allowed_users") or [] + mode = config.get("mode", "bot") from plugins._whatsapp_integration.helpers.bridge_manager import ( ensure_bridge_http_up, @@ -30,7 +31,7 @@ class QrCode(ApiHandler): if not is_process_alive(): try: ok = await ensure_bridge_http_up( - port, session_dir, cache_dir, allowed_users, + port, session_dir, cache_dir, allowed_users, mode=mode, ) if not ok: return { diff --git a/plugins/_whatsapp_integration/default_config.yaml b/plugins/_whatsapp_integration/default_config.yaml index 4cab44696..06ad4ede2 100644 --- a/plugins/_whatsapp_integration/default_config.yaml +++ b/plugins/_whatsapp_integration/default_config.yaml @@ -1,4 +1,7 @@ enabled: false +mode: bot +# bot: separate phone number — people message the bot directly +# self-chat: personal number — you message yourself to talk to the agent bridge_port: 3100 poll_interval_seconds: 3 allowed_users: [] diff --git a/plugins/_whatsapp_integration/extensions/python/job_loop/_10_wa_poll.py b/plugins/_whatsapp_integration/extensions/python/job_loop/_10_wa_poll.py index ec8a1fb2a..4ff7cea7b 100644 --- a/plugins/_whatsapp_integration/extensions/python/job_loop/_10_wa_poll.py +++ b/plugins/_whatsapp_integration/extensions/python/job_loop/_10_wa_poll.py @@ -55,12 +55,13 @@ async def _poll_loop() -> None: session_dir = files.get_abs_path("usr/whatsapp/sessions") cache_dir = files.get_abs_path("usr/whatsapp/media") allowed_users = config.get("allowed_users") or [] + mode = config.get("mode", "bot") # Start bridge if needed if not bridge_started or not bridge_manager.is_process_alive(): try: bridge_started = await bridge_manager.start_bridge( - port, session_dir, cache_dir, allowed_users, + port, session_dir, cache_dir, allowed_users, mode=mode, ) except Exception as e: PrintStyle.error(f"WhatsApp bridge start error: {format_error(e)}") diff --git a/plugins/_whatsapp_integration/helpers/bridge_manager.py b/plugins/_whatsapp_integration/helpers/bridge_manager.py index 2dfee21cd..00a03305b 100644 --- a/plugins/_whatsapp_integration/helpers/bridge_manager.py +++ b/plugins/_whatsapp_integration/helpers/bridge_manager.py @@ -29,6 +29,7 @@ async def start_bridge( session_dir: str, cache_dir: str, allowed_users: list[str] | None = None, + mode: str = "bot", ) -> bool: global _bridge_process async with _bridge_lock: @@ -43,6 +44,7 @@ async def start_bridge( "--port", str(port), "--session", session_dir, "--cache-dir", cache_dir, + "--mode", mode, ] if allowed_users: cmd += ["--allowed-users", ",".join(allowed_users)] @@ -101,6 +103,7 @@ async def ensure_bridge_http_up( session_dir: str, cache_dir: str, allowed_users: list[str] | None = None, + mode: str = "bot", ) -> bool: """Start bridge if needed and wait for HTTP server only (not WA connection).""" global _bridge_process @@ -116,6 +119,7 @@ async def ensure_bridge_http_up( "--port", str(port), "--session", session_dir, "--cache-dir", cache_dir, + "--mode", mode, ] if allowed_users: cmd += ["--allowed-users", ",".join(allowed_users)] diff --git a/plugins/_whatsapp_integration/webui/config.html b/plugins/_whatsapp_integration/webui/config.html index bfc51f0ab..bf12882af 100644 --- a/plugins/_whatsapp_integration/webui/config.html +++ b/plugins/_whatsapp_integration/webui/config.html @@ -102,6 +102,32 @@ +
+
+
Mode
+
How the agent connects to WhatsApp
+
+
+ +
+
+ + + +