mirror of
https://github.com/agent0ai/agent-zero.git
synced 2026-04-28 03:30:23 +00:00
refactor: rename allowed_users to allowed_numbers across plugin
This commit is contained in:
parent
e4991b6e6e
commit
39bed4f538
8 changed files with 61 additions and 24 deletions
|
|
@ -36,7 +36,7 @@ The WhatsApp session persists across restarts in `usr/whatsapp/sessions/`. No re
|
|||
| `allow_group` | Respond in group chats when mentioned or replied to | `false` |
|
||||
| `bridge_port` | Local HTTP port for bridge | `3100` |
|
||||
| `poll_interval_seconds` | Poll frequency (min 2) | `3` |
|
||||
| `allowed_users` | Phone numbers without + prefix | `[]` (all) |
|
||||
| `allowed_numbers` | Phone numbers without + prefix | `[]` (all) |
|
||||
| `project` | Activate project for WA chats | `""` |
|
||||
| `agent_instructions` | Extra agent instructions | `""` |
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ class QrCode(ApiHandler):
|
|||
port = int(config.get("bridge_port", 3100))
|
||||
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 []
|
||||
allowed_numbers = config.get("allowed_numbers") or []
|
||||
mode = config.get("mode", "dedicated")
|
||||
|
||||
from plugins._whatsapp_integration.helpers.bridge_manager import (
|
||||
|
|
@ -31,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, mode=mode,
|
||||
port, session_dir, cache_dir, allowed_numbers, mode=mode,
|
||||
)
|
||||
if not ok:
|
||||
return {
|
||||
|
|
|
|||
37
plugins/_whatsapp_integration/api/start.py
Normal file
37
plugins/_whatsapp_integration/api/start.py
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
"""Start WhatsApp bridge immediately."""
|
||||
|
||||
from helpers.api import ApiHandler, Request
|
||||
from helpers.errors import format_error
|
||||
from helpers import files, plugins
|
||||
|
||||
|
||||
PLUGIN_NAME = "_whatsapp_integration"
|
||||
|
||||
|
||||
class Start(ApiHandler):
|
||||
|
||||
async def process(self, input: dict, request: Request) -> dict:
|
||||
config = plugins.get_plugin_config(PLUGIN_NAME) or {}
|
||||
port = int(config.get("bridge_port", 3100))
|
||||
session_dir = files.get_abs_path("usr/whatsapp/sessions")
|
||||
cache_dir = files.get_abs_path("usr/whatsapp/media")
|
||||
allowed_numbers = config.get("allowed_numbers") or []
|
||||
mode = config.get("mode", "dedicated")
|
||||
|
||||
from plugins._whatsapp_integration.helpers.bridge_manager import (
|
||||
ensure_bridge_http_up,
|
||||
is_process_alive,
|
||||
)
|
||||
|
||||
if is_process_alive():
|
||||
return {"success": True, "message": "Bridge already running"}
|
||||
|
||||
try:
|
||||
ok = await ensure_bridge_http_up(
|
||||
port, session_dir, cache_dir, allowed_numbers, mode=mode,
|
||||
)
|
||||
if ok:
|
||||
return {"success": True, "message": "Bridge started"}
|
||||
return {"success": False, "message": "Failed to start bridge"}
|
||||
except Exception as e:
|
||||
return {"success": False, "message": format_error(e)}
|
||||
|
|
@ -6,7 +6,7 @@ bridge_port: 3100
|
|||
poll_interval_seconds: 3
|
||||
allow_group: false
|
||||
# allow_group: respond in group chats when mentioned or replied to
|
||||
allowed_users: []
|
||||
allowed_numbers: []
|
||||
# Example: ["34652029134", "1234567890"]
|
||||
project: ""
|
||||
agent_instructions: ""
|
||||
|
|
|
|||
|
|
@ -57,11 +57,11 @@ async def _poll_loop() -> None:
|
|||
port = int(config.get("bridge_port", 3100))
|
||||
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 []
|
||||
allowed_numbers = config.get("allowed_numbers") or []
|
||||
mode = config.get("mode", "dedicated")
|
||||
|
||||
# Detect config changes that require bridge restart
|
||||
desired = {"port": port, "mode": mode, "allowed_users": sorted(allowed_users)}
|
||||
desired = {"port": port, "mode": mode, "allowed_numbers": sorted(allowed_numbers)}
|
||||
running = bridge_manager.get_running_config()
|
||||
if bridge_started and bridge_manager.is_process_alive() and running and running != desired:
|
||||
PrintStyle.info(f"WhatsApp: config changed, restarting bridge")
|
||||
|
|
@ -72,7 +72,7 @@ async def _poll_loop() -> None:
|
|||
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, mode=mode,
|
||||
port, session_dir, cache_dir, allowed_numbers, mode=mode,
|
||||
)
|
||||
except Exception as e:
|
||||
PrintStyle.error(f"WhatsApp bridge start error: {format_error(e)}")
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ async def start_bridge(
|
|||
port: int,
|
||||
session_dir: str,
|
||||
cache_dir: str,
|
||||
allowed_users: list[str] | None = None,
|
||||
allowed_numbers: list[str] | None = None,
|
||||
mode: str = "dedicated",
|
||||
) -> bool:
|
||||
global _bridge_process
|
||||
|
|
@ -91,8 +91,8 @@ async def start_bridge(
|
|||
"--cache-dir", cache_dir,
|
||||
"--mode", mode,
|
||||
]
|
||||
if allowed_users:
|
||||
cmd += ["--allowed-users", ",".join(allowed_users)]
|
||||
if allowed_numbers:
|
||||
cmd += ["--allowed-numbers", ",".join(allowed_numbers)]
|
||||
|
||||
_kill_port_process(port)
|
||||
PrintStyle.info("WhatsApp: starting bridge")
|
||||
|
|
@ -104,7 +104,7 @@ async def start_bridge(
|
|||
), port)
|
||||
_start_log_reader(_bridge_process)
|
||||
_bridge_config.clear()
|
||||
_bridge_config.update({"port": port, "mode": mode, "allowed_users": sorted(allowed_users or [])})
|
||||
_bridge_config.update({"port": port, "mode": mode, "allowed_numbers": sorted(allowed_numbers or [])})
|
||||
|
||||
# Wait for bridge to become healthy
|
||||
for _ in range(20):
|
||||
|
|
@ -151,7 +151,7 @@ async def ensure_bridge_http_up(
|
|||
port: int,
|
||||
session_dir: str,
|
||||
cache_dir: str,
|
||||
allowed_users: list[str] | None = None,
|
||||
allowed_numbers: list[str] | None = None,
|
||||
mode: str = "dedicated",
|
||||
) -> bool:
|
||||
"""Start bridge if needed and wait for HTTP server only (not WA connection)."""
|
||||
|
|
@ -170,8 +170,8 @@ async def ensure_bridge_http_up(
|
|||
"--cache-dir", cache_dir,
|
||||
"--mode", mode,
|
||||
]
|
||||
if allowed_users:
|
||||
cmd += ["--allowed-users", ",".join(allowed_users)]
|
||||
if allowed_numbers:
|
||||
cmd += ["--allowed-numbers", ",".join(allowed_numbers)]
|
||||
|
||||
_kill_port_process(port)
|
||||
PrintStyle.info("WhatsApp: starting bridge for pairing")
|
||||
|
|
|
|||
|
|
@ -26,10 +26,10 @@
|
|||
} catch (e) { this.projects = []; }
|
||||
},
|
||||
allowed_text() {
|
||||
return (config?.allowed_users || []).join(', ');
|
||||
return (config?.allowed_numbers || []).join(', ');
|
||||
},
|
||||
set_allowed(val) {
|
||||
config.allowed_users = val.split(',')
|
||||
config.allowed_numbers = val.split(',')
|
||||
.map(s => s.trim().replace(/^\+/, '').replace(/^0+/, ''))
|
||||
.filter(s => s);
|
||||
},
|
||||
|
|
@ -239,7 +239,7 @@
|
|||
|
||||
<div class="field">
|
||||
<div class="field-label">
|
||||
<div class="field-title">Allowed Users</div>
|
||||
<div class="field-title">Allowed Numbers</div>
|
||||
<div class="field-description">Use international format without + or leading 0<br>e.g. +1 (415) 555-1234 → 14155551234. Empty = allow all</div>
|
||||
</div>
|
||||
<div class="field-control">
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ const SESSION_DIR = getArg('session', path.join(process.env.HOME || '~', '.agent
|
|||
const CACHE_DIR = getArg('cache-dir', path.join(process.env.HOME || '~', '.agent-zero', 'whatsapp', 'media'));
|
||||
const PAIR_ONLY = args.includes('--pair-only');
|
||||
const MODE = getArg('mode', 'dedicated'); // "dedicated" or "self-chat"
|
||||
const ALLOWED_USERS = (getArg('allowed-users', '') || '').split(',').map(s => s.trim()).filter(Boolean);
|
||||
const ALLOWED_NUMBERS = (getArg('allowed-numbers', '') || '').split(',').map(s => s.trim()).filter(Boolean);
|
||||
|
||||
mkdirSync(SESSION_DIR, { recursive: true });
|
||||
mkdirSync(CACHE_DIR, { recursive: true });
|
||||
|
|
@ -198,10 +198,10 @@ async function startSocket() {
|
|||
if (chatId === 'status@broadcast') continue;
|
||||
|
||||
// Check allowlist (resolve LID -> phone if needed)
|
||||
if (!msg.key.fromMe && ALLOWED_USERS.length > 0) {
|
||||
if (!msg.key.fromMe && ALLOWED_NUMBERS.length > 0) {
|
||||
const resolvedNumber = lidToPhone[senderNumber] || senderNumber;
|
||||
if (!ALLOWED_USERS.includes(resolvedNumber)) {
|
||||
console.log(`[bridge] Ignored message from ${resolvedNumber} (not in allowed users)`);
|
||||
if (!ALLOWED_NUMBERS.includes(resolvedNumber)) {
|
||||
console.log(`[bridge] Ignored message from ${resolvedNumber} (not in allowed numbers)`);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
@ -616,10 +616,10 @@ if (PAIR_ONLY) {
|
|||
app.listen(PORT, '127.0.0.1', () => {
|
||||
console.log(`[bridge] WhatsApp bridge listening on port ${PORT} (mode: ${MODE})`);
|
||||
console.log(`[bridge] Session: ${SESSION_DIR}`);
|
||||
if (ALLOWED_USERS.length > 0) {
|
||||
console.log(`[bridge] Allowed users: ${ALLOWED_USERS.join(', ')}`);
|
||||
if (ALLOWED_NUMBERS.length > 0) {
|
||||
console.log(`[bridge] Allowed numbers: ${ALLOWED_NUMBERS.join(', ')}`);
|
||||
} else {
|
||||
console.log('[bridge] No allowed users set — all messages will be processed');
|
||||
console.log('[bridge] No allowed numbers set — all messages will be processed');
|
||||
}
|
||||
console.log();
|
||||
startSocket();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue