10 KiB
WhatsHooked CLI Documentation
The WhatsHooked CLI provides a command-line interface for managing the WhatsHooked server, webhooks, and WhatsApp accounts.
Table of Contents
Installation
Build the CLI using the provided Makefile:
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):
-
API Key Authentication (Recommended)
- Uses Bearer token or x-api-key header
- Most secure and simple to use
-
Basic Authentication
- Uses username and password
- HTTP Basic Auth
Configuration Priority
Authentication credentials are loaded in the following priority order (highest to lowest):
- Command-line flags (highest priority)
- Environment variables
- Configuration file (lowest priority)
Setting Up Authentication
Option 1: Configuration File (Recommended)
Create a configuration file at ~/.whatshooked/cli.json:
{
"server_url": "http://localhost:8080",
"auth_key": "your-api-key-here",
"username": "",
"password": ""
}
Or use API key authentication:
{
"server_url": "http://localhost:8080",
"auth_key": "your-secure-api-key"
}
Or use username/password authentication:
{
"server_url": "http://localhost:8080",
"username": "admin",
"password": "your-secure-password"
}
You can also create a local configuration file in your project directory:
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):
export WHATSHOOKED_SERVER_URL="http://localhost:8080"
export WHATSHOOKED_AUTH_KEY="your-api-key-here"
Or with username/password:
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:
./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:
{
"server_url": "http://localhost:8080"
}
Configuration
Configuration File Locations
The CLI looks for configuration files in the following locations (in order):
- File specified by
--configflag $HOME/.whatshooked/cli.json./.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>: Path to configuration file--server <url>: Server URL (overrides config file)
Health Check
Check if the server is running and healthy:
./bin/whatshook-cli health
Hooks Management
List Hooks
List all configured webhooks:
./bin/whatshook-cli hooks
./bin/whatshook-cli hooks list
Add Hook
Add a new webhook interactively:
./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 connectedwhatsapp.disconnected- WhatsApp client disconnectedwhatsapp.qr.code- QR code generated for pairingwhatsapp.qr.timeout- QR code expiredwhatsapp.qr.error- QR code generation errorwhatsapp.pair.success- Device paired successfullywhatsapp.pair.failed- Device pairing failedwhatsapp.pair.event- Generic pairing event
Message Events:
message.received- Message received from WhatsAppmessage.sent- Message sent successfullymessage.failed- Message sending failedmessage.delivered- Message delivered to recipientmessage.read- Message read by recipient
Hook Events:
hook.triggered- Hook was triggeredhook.success- Hook executed successfullyhook.failed- Hook execution failed
If no events are specified, the hook will receive all events.
Remove Hook
Remove a webhook by ID:
./bin/whatshook-cli hooks remove <hook_id>
Accounts Management
List Accounts
List all configured WhatsApp accounts:
./bin/whatshook-cli accounts
./bin/whatshook-cli accounts list
Add Account
Add a new WhatsApp account interactively:
./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:
./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:
./bin/whatshook-cli send image <file_path>
Supported formats: JPG, PNG, GIF, WebP
Send Video
Send a video with optional caption:
./bin/whatshook-cli send video <file_path>
Supported formats: MP4, MOV, AVI, WebM, 3GP
Send Document
Send a document with optional caption:
./bin/whatshook-cli send document <file_path>
Supported formats: PDF, DOC, DOCX, XLS, XLSX, TXT, ZIP, and more
Examples
Example 1: Basic Setup
# Create config file
mkdir -p ~/.whatshooked
cat > ~/.whatshooked/cli.json <<EOF
{
"server_url": "http://localhost:8080",
"auth_key": "my-secure-api-key"
}
EOF
# Check server health
./bin/whatshook-cli health
# List hooks
./bin/whatshook-cli hooks list
Example 2: Using Environment Variables
# Set environment variables
export WHATSHOOKED_SERVER_URL="https://my-server.com:8080"
export WHATSHOOKED_AUTH_KEY="production-api-key"
# Use CLI without config file
./bin/whatshook-cli health
./bin/whatshook-cli accounts list
Example 3: Managing Hooks
# Add a new hook for all events
./bin/whatshook-cli hooks add
# Hook ID: my_hook
# Hook Name: My Webhook
# Webhook URL: https://example.com/webhook
# HTTP Method (POST): POST
# Events (comma-separated, or press Enter for all): [press Enter]
# Description (optional): My webhook handler
# Add a hook for specific events only
./bin/whatshook-cli hooks add
# Hook ID: message_hook
# Hook Name: Message Handler
# Webhook URL: https://example.com/messages
# HTTP Method (POST): POST
# Events (comma-separated, or press Enter for all): message.received, message.sent
# Description (optional): Handle incoming and outgoing messages
# List all hooks
./bin/whatshook-cli hooks
# Remove a hook
./bin/whatshook-cli hooks remove message_hook
Example 4: Sending Messages
# Send text message
./bin/whatshook-cli send text
# Enter account ID, recipient, and message when prompted
# Send image
./bin/whatshook-cli send image /path/to/photo.jpg
# Send video
./bin/whatshook-cli send video /path/to/video.mp4
# Send document
./bin/whatshook-cli send document /path/to/report.pdf
Example 5: Production Setup with Authentication
# Server config.json (enable authentication)
{
"server": {
"host": "0.0.0.0",
"port": 8080,
"auth_key": "super-secret-production-key"
}
}
# CLI config (~/.whatshooked/cli.json)
{
"server_url": "https://whatshooked.mycompany.com",
"auth_key": "super-secret-production-key"
}
# Now all CLI commands will be authenticated
./bin/whatshook-cli hooks list
./bin/whatshook-cli accounts add
Error Handling
The CLI provides clear error messages for common issues:
Authentication Errors
Error: HTTP 401: Unauthorized
Solution: Check your authentication credentials in the config file or environment variables.
Connection Errors
Error: dial tcp: connect: connection refused
Solution: Ensure the server is running and the URL is correct.
Invalid Credentials
Error: HTTP 403: Forbidden
Solution: Verify your API key or username/password are correct and match the server configuration.
Best Practices
- Use API Key Authentication: More secure than username/password, easier to rotate
- Store Config Securely: Don't commit config files with credentials to version control
- Use Environment Variables in CI/CD: Safer than storing credentials in files
- Enable Authentication in Production: Always use authentication for production servers
- Use HTTPS: In production, always use HTTPS for the server URL
Security Notes
- Never commit configuration files containing credentials to version control
- Use restrictive file permissions for config files:
chmod 600 ~/.whatshooked/cli.json - Rotate API keys regularly
- Use different credentials for development and production
- In production, always use HTTPS to encrypt traffic
Troubleshooting
Config File Not Found
If you see warnings about config file not being found, create one:
mkdir -p ~/.whatshooked
cp .whatshooked-cli.example.json ~/.whatshooked/cli.json
# Edit the file with your settings
Server Unreachable
Verify the server is running:
curl http://localhost:8080/health
Authentication Required
If the server requires authentication but you haven't configured it:
Error: HTTP 401: Unauthorized
Add authentication to your config file as shown in the Authentication section.