A Signal messenger bot for Vaquill, built on the unofficial signal-cli-rest-api and the signalbot Python framework. Two Docker containers -Documentation Index
Fetch the complete documentation index at: https://vaquill.ai/docs/llms.txt
Use this file to discover all available pages before exploring further.
signal-cli (handles the Signal protocol) and signal-bot (Python app calling Vaquill) - communicate over a local WebSocket. Source code at github.com/Vaquill-AI/integrations/signal-bot.
Features
- Plain-text Q&A via the Vaquill
/askAPI - Per-chat conversation history
- Slash-like commands:
help,examples,stats,clear - Runs entirely inside a local Docker network - no public URL required
Prerequisites
- Docker and Docker Compose
- A phone number you control for Signal registration (or an existing Signal account you can link as a secondary device)
- Vaquill API key (
vq_key_...). See Authentication.
Platform setup
You need to either register a fresh phone number with Signal, or link the bot as a secondary device on an existing Signal account.Option A: Register a fresh number (primary device)
Option B: Link as a secondary device
This keeps your existing Signal phone active and avoids re-registering a number:The registration is tied to the
signal-cli Docker volume. Back it up - losing the volume means re-registering and a new Signal safety number.Quickstart
Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
SIGNAL_PHONE_NUMBER | Yes | - | Registered or linked Signal number, E.164 format |
SIGNAL_API_URL | Yes | http://signal-cli:8080 | URL of the signal-cli-rest-api container |
VAQUILL_API_KEY | Yes | - | Vaquill API key (vq_key_...) |
VAQUILL_API_URL | No | https://api.vaquill.ai/api/v1 | API base URL |
VAQUILL_MODE | No | standard | standard or deep |
VAQUILL_COUNTRY_CODE | No | - | Jurisdiction filter, e.g. US |
.env.example for the full list.
Commands
| Command | Description |
|---|---|
help | Show available commands |
examples | Show example legal questions |
stats | View usage statistics |
clear | Clear conversation history |
hi / hello | Start a fresh conversation |
Deployment
Docker Compose (recommended)
Deploy both services on the same Docker network. Thesignal-cli service needs a persistent volume mounted at /home/.local/share/signal-cli to retain the registration.
Dokploy / self-hosted
Deploy as two separate applications in the same project:- signal-cli: Docker image
bbernhard/signal-cli-rest-api, envMODE=json-rpc, persistent volume on/home/.local/share/signal-cli. - signal-bot: Build from the Dockerfile in
signal-bot/, env vars from.env.
Risks to plan for
- No official Signal bot API - this is an unofficial integration.
- Account ban risk if Signal detects automated behavior. Keep volume low and ideally use a dedicated number.
- Protocol breakage - signal-cli updates can break on Signal protocol changes. Pin image versions (
bbernhard/signal-cli-rest-api:0.92) in production rather thanlatest. - Volume backups - the phone-number registration is tied to the persistent volume. Back it up regularly.
Troubleshooting
| Symptom | Fix |
|---|---|
curl http://localhost:8080/v1/about fails | signal-cli is not running. docker compose up signal-cli -d. |
| Registration verify returns 400 | Wrong or expired code. Request a new code with /v1/register/<number>. |
| Bot does not reply | Confirm SIGNAL_PHONE_NUMBER matches the registered number. Check docker compose logs signal-bot. |
| Vaquill 401 | Invalid VAQUILL_API_KEY. Generate a fresh one. |
| Account suddenly unable to send | Possible ban. Reduce volume and consider switching to a fresh number. |
Related
The official Business API path.
Telegram
Lightest setup, no Docker required.
Chatbots overview
Compare all six platforms.
Authentication
How Vaquill API keys work.

