# WhatsHooked CLI Documentation The WhatsHooked CLI provides a command-line interface for managing the WhatsHooked server, webhooks, and WhatsApp accounts. ## Table of Contents - [Installation](#installation) - [Authentication](#authentication) - [Configuration](#configuration) - [Commands](#commands) - [Examples](#examples) ## Installation Build the CLI using the provided Makefile: ```bash make build ``` The binary will be available at `./bin/whatshook-cli`. ## Authentication The CLI supports multiple authentication methods to secure communication with the WhatsHooked server. ### Authentication Methods The CLI supports two authentication methods (in priority order): 1. **API Key Authentication** (Recommended) - Uses Bearer token or x-api-key header - Most secure and simple to use 2. **Basic Authentication** - Uses username and password - HTTP Basic Auth ### Configuration Priority Authentication credentials are loaded in the following priority order (highest to lowest): 1. **Command-line flags** (highest priority) 2. **Environment variables** 3. **Configuration file** (lowest priority) ### Setting Up Authentication #### Option 1: Configuration File (Recommended) Create a configuration file at `~/.whatshooked/cli.json`: ```json { "server_url": "http://localhost:8080", "auth_key": "your-api-key-here", "username": "", "password": "" } ``` Or use API key authentication: ```json { "server_url": "http://localhost:8080", "auth_key": "your-secure-api-key" } ``` Or use username/password authentication: ```json { "server_url": "http://localhost:8080", "username": "admin", "password": "your-secure-password" } ``` You can also create a local configuration file in your project directory: ```bash cp .whatshooked-cli.example.json .whatshooked-cli.json # Edit the file with your credentials ``` #### Option 2: Environment Variables Set environment variables (useful for CI/CD): ```bash export WHATSHOOKED_SERVER_URL="http://localhost:8080" export WHATSHOOKED_AUTH_KEY="your-api-key-here" ``` Or with username/password: ```bash export WHATSHOOKED_SERVER_URL="http://localhost:8080" export WHATSHOOKED_USERNAME="admin" export WHATSHOOKED_PASSWORD="your-password" ``` #### Option 3: Command-Line Flags Pass credentials via command-line flags: ```bash ./bin/whatshook-cli --server http://localhost:8080 health ``` Note: Currently, authentication credentials can only be set via config file or environment variables. Command-line flags for auth credentials may be added in future versions. ### No Authentication If your server doesn't require authentication, simply omit the authentication fields: ```json { "server_url": "http://localhost:8080" } ``` ## Configuration ### Configuration File Locations The CLI looks for configuration files in the following locations (in order): 1. File specified by `--config` flag 2. `$HOME/.whatshooked/cli.json` 3. `./.whatshooked-cli.json` (current directory) ### Configuration Options | Option | Type | Default | Description | |--------|------|---------|-------------| | `server_url` | string | `http://localhost:8080` | WhatsHooked server URL | | `auth_key` | string | `""` | API key for authentication | | `username` | string | `""` | Username for Basic Auth | | `password` | string | `""` | Password for Basic Auth | ## Commands ### Global Flags All commands support the following global flags: - `--config `: Path to configuration file - `--server `: Server URL (overrides config file) ### Health Check Check if the server is running and healthy: ```bash ./bin/whatshook-cli health ``` ### Hooks Management #### List Hooks List all configured webhooks: ```bash ./bin/whatshook-cli hooks ./bin/whatshook-cli hooks list ``` #### Add Hook Add a new webhook interactively: ```bash ./bin/whatshook-cli hooks add ``` You'll be prompted for: - Hook ID - Hook Name - Webhook URL - HTTP Method (default: POST) - Events to subscribe to (optional, comma-separated) - Description (optional) **Available Event Types:** WhatsApp Connection Events: - `whatsapp.connected` - WhatsApp client connected - `whatsapp.disconnected` - WhatsApp client disconnected - `whatsapp.qr.code` - QR code generated for pairing - `whatsapp.qr.timeout` - QR code expired - `whatsapp.qr.error` - QR code generation error - `whatsapp.pair.success` - Device paired successfully - `whatsapp.pair.failed` - Device pairing failed - `whatsapp.pair.event` - Generic pairing event Message Events: - `message.received` - Message received from WhatsApp - `message.sent` - Message sent successfully - `message.failed` - Message sending failed - `message.delivered` - Message delivered to recipient - `message.read` - Message read by recipient Hook Events: - `hook.triggered` - Hook was triggered - `hook.success` - Hook executed successfully - `hook.failed` - Hook execution failed If no events are specified, the hook will receive all events. #### Remove Hook Remove a webhook by ID: ```bash ./bin/whatshook-cli hooks remove ``` ### Accounts Management #### List Accounts List all configured WhatsApp accounts: ```bash ./bin/whatshook-cli accounts ./bin/whatshook-cli accounts list ``` #### Add Account Add a new WhatsApp account interactively: ```bash ./bin/whatshook-cli accounts add ``` You'll be prompted for: - Account ID - Phone Number (with country code, e.g., +1234567890) - Session Path (where to store session data) After adding, check the server logs for a QR code to scan with WhatsApp. ### Send Messages #### Send Text Message Send a text message interactively: ```bash ./bin/whatshook-cli send text ``` You'll be prompted for: - Account ID - Recipient (phone number or JID) - Message text #### Send Image Send an image with optional caption: ```bash ./bin/whatshook-cli send image ``` Supported formats: JPG, PNG, GIF, WebP #### Send Video Send a video with optional caption: ```bash ./bin/whatshook-cli send video ``` Supported formats: MP4, MOV, AVI, WebM, 3GP #### Send Document Send a document with optional caption: ```bash ./bin/whatshook-cli send document ``` Supported formats: PDF, DOC, DOCX, XLS, XLSX, TXT, ZIP, and more ## Examples ### Example 1: Basic Setup ```bash # Create config file mkdir -p ~/.whatshooked cat > ~/.whatshooked/cli.json <